模板定义订单问题

时间:2011-08-17 10:40:59

标签: visual-studio-2010 c++11

我有一个简单的mixin,我将其混合到我的其他模板类中。

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 个答案:

答案 0 :(得分:1)

我不相信有任何办法让这项工作成功。每个类的类型之间存在循环依赖关系。 A需要mixin<A<...>>的定义,mixin<A<...>>需要A的定义。

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

例如:

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

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