C ++: частичная специализация классов шаблонов шаблонов

Следующий код:

using namespace std;

template <typename X>
class Goo {};


template <typename X>
class Hoo {};


template <class A, template <typename> class B = Goo >
struct Foo {
  B<A> data;
  void foo1();
  void foo2();

};


template <typename A>
void Foo<A>::foo1() { cout << "foo1 for Goo" << endl;}


int main() {
  Foo<int> a;
  a.foo1();

}

дает мне ошибку компилятора:

test.cc:18: error: invalid use of incomplete type 'struct Foo<A, Goo>'
test.cc:11: error: declaration of 'struct Foo<A, Goo>'

Почему я не могу частично специализировать foo1 ()? Если это не так, как мне это сделать?

У меня есть другой вопрос: что, если я хочу, чтобы foo2 () определялся только для A = int, B = Hoo а не для какой-либо другой комбинации, как мне это сделать?

8
задан user231536 3 January 2012 в 21:12
поделиться