[英]Template pass member function with args and return value as parameter c++
我想为类传递一个模板化函数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);
}
您需要使用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);
// ^^^^^^^^^^^^^
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.