我想为类传递一个模板化函数参数和该类的一个方法来调用。该方法有参数和返回值。
这是我目前所拥有的。我相信我对模板化函数语法有点迷惑:
栏.h
class Bar {
public:
Bar();
int FuncBar(int arg1);
}
foo.h
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.cc
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);
// ^^^^^^^^^^^^^
}
关于c++ - 带有参数的模板传递成员函数和返回值作为参数c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46079982/