模板化函数指针说明

Templated Function Pointer Explanation

本文关键字:指针 说明 函数      更新时间:2023-10-16

我对这里发生的事情感到困惑,我希望你们中的一位大师可以帮助我理解。我已经将这门课提炼成似乎相关的方法,希望我没有错过任何东西。

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<&foo::a_member_function> b;member_function 模板参数创建类型为 bar 的对象,则 模板参数将设置为成员函数 foo::a_member_function 。然后,当你调用myFunc,给它一个指向foo的指针时,它将在该foo上调用该成员函数。