我無法爲類模板特化中的模板化方法制作專門的模板。在模板化類中的模板化方法中重載std :: function參數
比方說,我有以下代碼:
#include <functional>
template<typename T>
class myClass {
public:
T bar() {
return T();
}
template<typename P>
bool foo(std::function<P(T)> g) {
g(bar());
return true;
}
};
如果我想專門功能bar
爲myClass<void>
我會做這種方式:
template<> void myClass<void>::bar() {
}
但是,當我試圖專注foo
以同樣的方式,我得到一個編譯器錯誤,指出error: invalid parameter type ‘void’
並指向foo的原始定義。
template<>
template<typename P>
bool myClass<void>::foo(std::function<P(void)> g) {
bar();
g();
return true;
}
有沒有人有任何建議,我做錯了什麼?
你嘗試使用'的std ::功能
''不是的std ::函數
Maliafo
我做了,錯誤保持不變。 – waran
最後一部分看起來像函數模板的部分特化(並且缺少模板參數),這是禁止的。 'foo'專業化應該看起來像'template <> template <> bool myClass :: foo < void >(std :: function g)'。或者你應該把它寫在'myClass'模板特化中,因爲這個模板類專用化需要新的'foo'模板函數,你不能像在專用模板中那樣專門從基本模板中專門化'foo'。 –
VTT