我想传递一个模板化的函数args用于类和该类的方法来调用。该方法具有参数和返回值。
这是我到目前为止所拥有的。我相信我在模板化的函数语法上有点绊倒了:
class Bar {
public:
Bar();
int FuncBar(int arg1);
}
template<typename A, int (A::*Method)()>
int FuncTemplate(A* a, int bar_arg1) {
....
return a->Method(bar_arg1)
}
class Foo {
public:
explicit Foo(Bar* bar);
private:
void FuncFoo();
Bar* bar_;
}
Foo::Foo(Bar bar) : bar_(bar) {};
void Foo::FuncFoo() {
...
int bar_arg1 = 0;
FuncTemplate<Bar, &(*bar_)::FuncBar>(bar_, bar_arg1);
}
答案 0 :(得分:3)
您需要使用int (A::*Method)(int)
作为函数指针类型,因为成员函数需要int
作为参数。
此外,对成员函数的调用需要为(a->*Method)(bar_arg1)
。使用成员函数调用成员函数的语法不是很直观。
template<typename A, int (A::*Method)(int)>
int FuncTemplate(A* a, int bar_arg1) {
....
return (a->*Method)(bar_arg1)
}
此外,您需要使用&Bar::FuncBar
来获取指向成员函数的指针,而不是&(*bar_)::FuncBar
。
void Foo::FuncFoo() {
int bar_arg1 = 0;
FuncTemplate<Bar, &Bar::FuncBar>(bar_, bar_arg1);
// ^^^^^^^^^^^^^
}