クラステンプレートの特殊化でテンプレートメソッドの特殊テンプレートを作成する際に問題があります。テンプレートクラスのテンプレートメソッドのstd :: functionパラメータのオーバーロード
のは、私は次のコードを持っているとしましょう:私はfoo
を専門にしようとしたとき
template<> void myClass<void>::bar() {
}
しかし:私はmyClass<void>
のための機能bar
を専門としたい場合、私はそれをこのように行うだろう
#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;
}
};
同じ方法で、私はerror: invalid parameter type ‘void’
と言って、fooの元の定義を指してコンパイラエラーを取得します。
template<>
template<typename P>
bool myClass<void>::foo(std::function<P(void)> g) {
bar();
g();
return true;
}
私は何を間違えているのですか?
フル実施例であるあなたの代わりに 'のstd ::関数
を'使用しようとしましたか? – Maliafo
私は、エラーは同じままだった。 – waran
最後の部分は、禁止されている関数テンプレートの部分的な特殊化(およびテンプレート引数がない)のように見えます。 'foo'の特殊化は' template <> template <> bool myClassのようになります。 :: foo < void >(std :: function g) 'あるいは、テンプレートクラスの特殊化には新しい 'foo'テンプレート関数が必要なので、' myClass'テンプレートの専門化の中に書かなければなりません。特殊テンプレートのように 'foo'を基本テンプレートから特殊化することはできません。 –
VTT