2012-08-28 39 views
7

我遇到了模板类中的循环依赖问题。有一个代码示例:循环依赖(在模板化基类中使用内部类型的子类)

template <typename T> struct A 
{ 
    typedef typename T::C D; 
    //typename T::C c; 
}; 

struct B : public A<B> 
{ 
    struct C {}; 
}; 

当我尝试实例B,I得到一个编译错误:“C”不是“B”(MSVC)或无效使用不完整的类型的'的一个成员结构B'(GCC)。
更改样本以使其起作用的最佳方法是什么?

+3

你不能。提供你想要解决的问题的一个更完整的例子,我们可以看看重构代码。 –

回答

6
struct B_base { struct C {}; }; 
strucr B : A<B_base>, B_base { }; 
+0

如果'A'是一个将参数类型为'T'的CRTP模板放入成员声明中,可能不会有帮助。在这种情况下,你可能只需要将'C'作为一个额外的模板参数。 – aschepler