2011-08-17 44 views
0

我有一个简单的混合,我正在混合到我的其他模板类。模板定义顺序问题

template<typename T> class mixin { 
    static T* null() { return nullptr; } 
    auto func() -> decltype(null()->func()); 
}; 
template<...> class A : public mixin<A<...>> { 
    .... 
}; 
template<...> class B : public mixin<A<...>> { 
    .... 
}; 
template<...> class C : public mixin<A<...>> { 
    .... 
}; 

现在,我有一个问题。其中一个mixin函数将返回一个必须根据派生类型推导出来的类型。但是,当我尝试使用演绎来找到这种类型时,编译器告诉我我正在使用一个未定义的类型。如果我将mixin的定义移动到类之后,那么在混合时我将无法从它继承。在这种情况下,如何更改我的类以允许类型扣除?

+1

难道不该`自动FUNC() - >的...``而不是void`? – 2011-08-17 17:13:44

回答

1

我不相信有什么办法可以做到这一点。每个类的类型之间有循环依赖关系。 A需要定义mixin<A<...>>mixin<A<...>>需要定义A

在我看来,你最好只是在mixin参数中手动指定类型。

例如:

template<typename ReturnType> class mixin 
{ 
    auto func() -> ReturnType; 
}; 

template<...> class A : public mixin<int> 
{ 
    int func(); 
}; 
+0

工作。谢谢! – Puppy 2011-08-17 20:23:48