0
コンパイル時に関数ポインタにリンクするラッパー関数を記述しようとしています。したがって、C++ 11で完全に正常に動作する次のコードを書きました:C++でのテンプレート引数としてのメンバー関数ポインタの宣言11
#include <iostream>
template<typename Fn, Fn func, typename... Args>
typename std::result_of<Fn(Args...)>::type callfunc(Args&&... args){
//do something else here
return (*func)(args...);
}
double add(double a, double b){
return a+b;
}
int main(){
std::cout << callfunc<decltype(&add), &add>(2.0, 3.0) << "\n";
}
私はこの
#include <iostream>
template<typename Fn, Fn func, typename... Args>
typename std::result_of<Fn(Args...)>::type callfunc(Args&&... args){
//do something else here
return (*func)(args...);
}
class testclass {
public:
double testadd(double a, double b);
void run();
};
double testclass::testadd(double a, double b){
return a+b;
}
void testclass::run(){
std::cout <<
callfunc<decltype(&testclass::testadd), &testclass::testadd>(2.0, 3.0)
// ^^^^^ this won't compile! ^^^^
<< "\n";
}
int main(){
testclass obj;
obj.run()
}
のようなメンバ関数と同じことをしようとした場合しかし、私は、次のコンパイラエラーを取得:
error: indirection requires pointer operand ('double (testclass::*)(double,double)' invalid) return (*func)(args...);
私は何が間違っていますか?