これは本当に基本的な質問ですが、私はStackOverflowでも答えを見つけることができませんでした。あなたがこれを読むときに私を打つことを望むなら、ごめんなさい。boolのテンプレート部分的特殊化
私はbool値の部分的な特殊化をしたい:
template < typename Object, bool Shared = false >
class Foo {
void bar();
};
template < typename Object >
void Foo<Object, true>::bar() {}
template < typename Object >
void Foo<Object, false>::bar() {}
int main() {
Foo<int> test;
return 0;
}
私は考えは正しいと思うが、私は(おそらく本当に愚かな)このコードで何かが欠けている:
Test3.cpp:8:30: error: invalid use of incomplete type ‘class Foo<Object, true>’
void Foo<Object, true>::bar() {
^
Test3.cpp:2:7: note: declaration of ‘class Foo<Object, true>’
class Foo {
^~~
Test3.cpp:13:31: error: invalid use of incomplete type ‘class Foo<Object, false>’
void Foo<Object, false>::bar() {
^
Test3.cpp:2:7: note: declaration of ‘class Foo<Object, false>’
class Foo {
あなたはクラスを特化しようとしていることではないでしょうか?特殊化の一部である関数を定義しようとしているようです。 –
関数/メソッドを部分的に特殊化することはできませんが、完全に特殊化することはできます: 'template <> void Foo :: bar(){}' [デモ](http://coliru.stacked-crooked.com/a/18f9ddb32cf72ddd) –
Jarod42