[英]C++11 HOWTO template aliasing for function pointers
我需要在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]
}
现在,添加模板需要使用关键字关键字,因此我尝试了:
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;
};
我没看到问题。 唯一看起来很奇怪的是,您在别名中使用P
作为类模板。 在代码段中, P
不是模板。
无论如何,这就是我使用的成员函数指针:
template <typename Class, typename Ret, typename ... Args>
using MemFunPtr = Ret (Class::*)(Args ...);
您可以像这样使用它:
struct A
{
void fun(int, char) { cout << "whoop\n"; }
};
int main()
{
MemFunPtr<A, void, int, char> m = &A::fun;
A a;
(a.*m)(5, 'a');
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.