Это действительно основной вопрос, который я думаю, но я не смог найти ответ даже на StackOverflow. Извините, если вы хотите ударить меня, когда вы это прочитаете.Шаблон частичной специализации на 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() {}' [Demo] (http://coliru.stacked-crooked.com/a/18f9ddb32cf72ddd) –
Jarod42