我对这里发生的事感到困惑,我希望你们中的一位大师可以帮助我理解。我把这个课程提炼成了似乎相关的方法,希望我没有错过任何东西。
template < int* ( foo::*member_function )( void ) >
class bar
{
public:
int myFunc( foo* myFoo )
{
int* result = ( myFoo->*member_function )();
return *result;
}
};
我不明白怎么知道member_function是什么,没有变量,但是它被调用了,有人帮助我吗?
答案 0 :(得分:6)
实际上可以作为模板参数传递的数据种类有限;也就是说,并非所有模板参数都需要是类型:
[C++11: 14.1/1]:
非类型模板参数应具有以下之一(可选 cv-qualified )类型:
- 整数或枚举类型,
- 指向对象或指向函数的指针,
- 对对象的左值引用或对函数的左值引用,
- 指向成员的指针,
std::nullptr_t
。
您已经展示了将指针指向成员作为模板参数传递的示例。
答案 1 :(得分:4)
member_function
是在:
template < int* ( foo::*member_function )( void ) >
也就是说,模板参数member_function
是foo
的成员函数,它不带任何参数并返回int*
。
如果使用bar
之类的内容创建bar<&foo::a_member_function> b;
类型的对象,则member_function
模板参数将设置为成员函数foo::a_member_function
。然后,当您致电myFunc
时,向其传递指向foo
的指针,它将在foo
上调用该成员函数。