2014-03-18 82 views
0

我正在嘗試創建一個模板,以便我可以有一個函數指針(用於回調函數),它接受既作爲成員函數的基類又作爲具有一種具有全球定義功能的方法。具有函數指針的模板類不接受專業化

目前,我有

template <class c> 
struct Callback { 
    typedef void(c::*callback)(void); 
}; 

其中一期工程,將允許我使用回調::回調作爲一種

然而,當我嘗試添加特定的實現,如:

class VOIDCLASS { 
    void * void_ptr; 
}; 
// Callback template declaration as above here 
template <VOIDCLASS> 
struct Callback { 
    typedef void(*callback)(void); 
}; 

我得到一個編譯器錯誤:錯誤C3855:'回調':模板參數'c'與聲明不兼容 這是使用Visual Stud V110(VS2012)和Windows 8.1

回答

2

的IO 2013的平臺工具,設置明確的分工是這樣寫的:

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

我想你的意思是:

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