Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 声明模板时指向成员函数语法的指针_C++_Templates_Member Function Pointers - Fatal编程技术网

C++ 声明模板时指向成员函数语法的指针

C++ 声明模板时指向成员函数语法的指针,c++,templates,member-function-pointers,C++,Templates,Member Function Pointers,这就是我努力实现的目标: class MyClass { public: template<typename T> void whenEntering( const std::string& strState, T& t, void T::(*pMemberFunction)(void)) /// compilation fails here

这就是我努力实现的目标:

class MyClass
{
    public:
    template<typename T>
    void whenEntering( const std::string& strState, 
                       T& t, 
                       void T::(*pMemberFunction)(void)) /// compilation fails here
    {
        t.(*pMemberFunction)(); // this line is only an example
    }
}
我可能对成员语法的指针有错误。。。但我也担心我可能不会这样定义模板。。。你有什么想法吗?

你想要
void(T::*pMemberFunction)(void)

另一个问题可能只是示例用法中的输入错误,但是调用成员函数使用
*
作为单个运算符;它们之间不能有
),甚至不能有空格。我猜这是一个输入错误,因为这几乎是处理指向成员运算符的指针所具有的奇怪运算符优先级的正确方法:

(t.*pMemberFunction)();
您需要
void(T::*pMemberFunction)(void)

另一个问题可能只是示例用法中的一个输入错误,但是调用成员函数使用
*
作为单个运算符;不能使用
在它们之间,甚至是空格。我猜这是一个输入错误,因为这几乎是处理指向成员运算符的指针所具有的奇怪运算符优先级的正确方法:

(t.*pMemberFunction)();

您的代码中存在几个问题。特别是,声明成员函数指针的语法是
void(T::*pMemberFunction)(void)

总的来说,您的代码应该是这样的:

class MyClass
{
    public:
    template<typename T>
    void whenEntering( const std::string& strState,
                       T& t,
                       void (T::* pMemberFunction)(void)
                               ) /// this fails
    {
        t.*pMemberFunction(); // this line is only an example
    }
};
class-MyClass
{
公众:
模板
输入时无效(常量标准::字符串和标准状态,
T&T,
void(T::*pMemberFunction)(void)
)///这是失败的
{
t、 *pMemberFunction();//这一行只是一个示例
}
};

您的代码中有几个问题。特别是,声明成员函数指针的语法是
void(T::*pMemberFunction)(void)

总的来说,您的代码应该是这样的:

class MyClass
{
    public:
    template<typename T>
    void whenEntering( const std::string& strState,
                       T& t,
                       void (T::* pMemberFunction)(void)
                               ) /// this fails
    {
        t.*pMemberFunction(); // this line is only an example
    }
};
class-MyClass
{
公众:
模板
输入时无效(常量标准::字符串和标准状态,
T&T,
void(T::*pMemberFunction)(void)
)///这是失败的
{
t、 *pMemberFunction();//这一行只是一个示例
}
};