[英]Templated Function Pointer Explanation
我对这里发生的事感到困惑,我希望你们中的一位大师可以帮助我理解。 我把这个类提炼成了看似相关的方法,希望我没有错过任何东西。
template < int* ( foo::*member_function )( void ) >
class bar
{
public:
int myFunc( foo* myFoo )
{
int* result = ( myFoo->*member_function )();
return *result;
}
};
我不明白这是怎么知道member_function是什么,没有变量,但是它被调用了,有人帮助我吗?
您可以实际传递的数据种类有限,可作为模板参数; 也就是说,并非所有模板参数都需要是类型:
[C++11: 14.1/1]:
非类型模板参数应具有以下(可选的cv限定 )类型之一:
- 积分或枚举类型,
- 指向对象或指向函数的指针,
- 左值引用对象或左值引用函数,
- 指向成员的指针,
std::nullptr_t
。
您已经展示了将指针指向成员作为模板参数传递的示例。
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
上调用该成员函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.