我正在尝试创建一个模板,以便我可以拥有一个函数指针(用于回调函数),它既接受一个Class作为成员函数的基础,又接受一种方法来获得全局定义的函数。
目前我有
template <class c>
struct Callback {
typedef void(c::*callback)(void);
};
哪个有效并且允许我将Callback :: callback用作类型
但是,当我尝试添加特定的实现时,例如:
class VOIDCLASS {
void * void_ptr;
};
// Callback template declaration as above here
template <VOIDCLASS>
struct Callback {
typedef void(*callback)(void);
};
我收到编译错误:错误C3855:'回调':模板参数'c'与声明不兼容 这是使用Visual Studio 2013与平台工具集v110(VS2012)和Windows 8.1
答案 0 :(得分:2)
显式专业化的写法如下:
template<>
struct Callback<VOIDCLASS> {
typedef void(*callback)(void);
};
答案 1 :(得分:1)
我认为你的意思是:
template <>
struct Callback<VOIDCLASS>
{
typedef void(*callback)(void);
};