模板成员函数指针
Template Member Function Pointers
我目前有一个问题,VS2010 唠叨说"Nuke"的构造函数中使用的"TFunctionPointer"和作为数据成员是未定义的。有人可以向我解释为什么会这样吗?任何帮助都非常感谢。
template<typename T>
typedef void (T::* TFunctionPointer)();
class Nuke
{
public:
Nuke( TFunctionPointer pFunction );
virtual ~Nuke();
private:
TFunctionPointer m_pFunction;
};
//编辑
我试图做的是允许存储指向任何类型的类的函数指针,并在销毁Nuke对象时调用。雷伊的转折。但我想这是不可能的。谢谢你们的帮助。
//编辑
显然,Boost::shared_ptr 是我想要的。
模板类型定义在C++是不合法的。
不过,您可以做的(在"旧"和"新"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++不支持
模板typedefs,因此template<typename T> typedef
是非法的。
如果可以使用 C++11,则可以使用模板别名。我不太确定成员函数指针是否可以做到这一点,并且不能保证语法正确,但我希望它如下所示:
template <typename T>
using TFunctionPointer = void(T::*)();
当然,VS2010可能不支持这一点。
无论如何,您的Nuke
类不会为TFunctionPointer
提供类型,因此即使该typedef合法,您也尝试传递模板而不是具体类型,这是不可能的。
您可以将函数指针包装到类型中并使用适当的实例化:
template<typename T> struct FunctionPointer { typedef void (T::*Type)(); };
class Nuke {
public:
Nuke(FunctionPointer<Nuke>::Type pFunction);
virtual ~Nuke();
private:
FunctionPointer<Nuke>::Type m_pFunction;
};
相关文章:
- 如何正确编写指针函数声明?
- C++常规指针函数或模板
- 如何重新定义 C++ 指针函数?
- C++ 指向其他类函数的指针函数
- 指针到指针函数参数
- 将指向成员的指针函数传递到模板中
- C++ 在 none 常量指针函数中返回一个常量指针
- 如何使用指针函数编写/读取数组
- 是C 中的函数指针函数对象
- 如何从另一个类调用指向成员的指针函数
- 如何声明采用指向成员的指针函数的函数
- 如何构造一个以可变参数指针函数作为成员的类?
- c 通过值或指针函数语法
- 将typedef方法作为指针函数传递
- 从 Main 中的双指针函数打印出指针数组
- strcpy 对指针函数的引用
- 这是否仍然声明一种指针函数的别名?
- 将指向成员的指针函数与 std::shared_ptr 结合使用
- 'Incomplete type' 为标准::函数声明指向成员的指针函数模板参数时出错
- 从注入进程的 DLL 调用函数并更改指针函数的地址