带有函数指针的模板类不接受专门化

时间:2014-03-18 18:29:42

标签: c++ templates

我正在尝试创建一个模板,以便我可以拥有一个函数指针(用于回调函数),它既接受一个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

2 个答案:

答案 0 :(得分:2)

显式专业化的写法如下:

template<>
struct Callback<VOIDCLASS> {
    typedef void(*callback)(void);
};

答案 1 :(得分:1)

我认为你的意思是:

template <>
struct Callback<VOIDCLASS>
{
    typedef void(*callback)(void);
};