繁体   English   中英

模板化功能指针说明

[英]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_functionfoo的成员函数,它不带参数并返回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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM