我需要代码在 Visual Studio 2013 上编译
最初我有:
class P
{
typedef void* (P::*FunctionPtr)(void);
typedef void* (*T_ptr)(void*);
private:
T_ptr getCompatibleFunctionPointer(FunctionPtr funcPtr);
T_ptr m_t_ptr;
public:
[omitting constructors, etc]
}
现在,添加模板需要关键字 using 所以我试过:
typedef void* (*T_ptr)(void*);
//tried this:
template<typename objectThread>
using FunctionPtr = void(P<objectThread>::*)(void);
//also tried:
template<typename objectThread>
using FunctionPtr = void(P< typename objectThread>::*)(void);
//also tried:
template<typename objectThread>
using FunctionPtr = void(P< typename objectThread>*)(void);
template<typename objectThread>
class P{
private:
template<typename objectThread>
T_ptr P<objectThread>::getCompatibleFunctionPointer(FunctionPtr funcPtr) {}
T_ptr m_t_ptr;
};
我找不到实现我需要的方法。我确实需要保留模板并且不能使用 Boost(以防万一)。
最佳答案
你可以在类中声明它
using FunctionPtr = void(P<objectThread>::*)();
那只是在类里面使用它。
所以,你的代码将只是
template<typename objectThread>
class P{
using T_ptr = void*(*)(void*);
using FunctionPtr = void(P<objectThread>::*)();
private:
T_ptr getCompatibleFunctionPointer(FunctionPtr funcPtr) {}
T_ptr m_t_ptr;
};
关于函数指针的 C++11 HOWTO 模板别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26653035/