我有一个简单的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
的定义移到类之后,那么在混合时我将无法从中继承。在这种情况下,如何更改类以允许类型推导?
答案 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();
};