Если я правильно понимаю, следующая классическая циклическая зависимость между классами шаблона:Ломая шаблон круговой зависимости с помощью шаблона параметров шаблона
template <class MyB>
struct A {
MyB *b_;
};
template <class MyA>
struct B {
MyA *a_;
};
Если мы хотим создать экземпляр A
с B
и B
с A
, то мы не можем начать ни с одной, так как нам нужно будет написать: A<B<A<B<...>>>
(бесконечный).
Я думаю, что параметры шаблона шаблона обеспечивают решение. Следующие компилирует код (с gcc
версии 4.8.2):
template <class MyB>
struct A {
MyB *b_;
};
template <template <class> class MyA>
struct B {
MyA<B> *a_;
};
int main() {
using MyB = B<A>;
using MyA = A<MyB>;
MyA a;
MyB b;
a.b_ = &b; b.a_ = &a;
return 0;
}
я упускаю суть проблемы?
ОБНОВЛЕНИЕ: Я просто столкнулся с сообщением this, в котором предлагается практически то же решение.