我目前有一个问题,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 正是我要找的。p>
最佳答案
模板类型定义在 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/