c++ - 模板成员函数指针

标签 c++ templates pointer-to-member

我目前有一个问题,VS2010 提示“Nuke”的构造函数中使用的“TFunctionPointer”& 作为数据成员未定义。有人可以向我解释这是为什么吗?非常感谢任何帮助。

template<typename T>
typedef void (T::* TFunctionPointer)();

class Nuke
{
public:
    Nuke( TFunctionPointer pFunction );
    virtual ~Nuke();

private:
    TFunctionPointer m_pFunction;

};

//编辑

我想做的是允许存储指向任何类型类的函数指针,并在销毁 Nuke 对象时调用它。 RAII 的一个转折点。但我想这是不可能的。感谢大家的帮助。

//编辑

显然 Boost::shared_ptr 正是我要找的。

最佳答案

模板类型定义在 C++ 中是不合法的。

不过(在“旧”和"new"C++ 中)您可以做的是:

template <typename T>
struct TFunctionPointer
{
    typedef void (T::*Type)();
};

class Nuke
{
public:
    Nuke( TFunctionPointer<Nuke>::Type pFunction );
    virtual ~Nuke();

private:
    TFunctionPointer<Nuke>::Type m_pFunction;
};

关于c++ - 模板成员函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10115048/

相关文章:

C++ 强制 mem_fun 选择特定的重载成员函数

c++ - 将 C++ 函数指针分配给同一对象的成员函数

c# - 是否可以使用依赖于c++项目的Azure Pipeline网络核心项目进行管理?

c++ - 二叉树上的广度优先搜索

c++ - 模板函数的参数不进行任何隐式转换

c++ - 链接 boost.asio

c++ - 这在 C++ 模板中意味着什么?

c++ - 奇怪的模板规范

c++ - 模板问题

c++ - 指向派生类成员函数的指针,但不是派生(虚拟)函数