【发布时间】:2015-01-31 21:23:03
【问题描述】:
在我当前的项目中,我需要能够提供基于模板的多重继承(Mixin 模式)并且有两个可以一起交互的类(具有镜像多重继承树)(即一个使用同一继承级别的另一个方法)。
长话短说,我似乎找不到一种优雅的方式来构建它。下面是一个简化的测试用例(您可以直接运行和编辑它here)。
是否有一种模式或技巧可以让我拥有与注释行类似的内容,同时保持任何子类相对简洁?
显然,嵌套的Thing 类需要从另一个提供必要接口方法的类继承。然而,任何修复继承问题(CRTP...)的尝试似乎总是导致我遇到递归继承或不完整的基类型问题...
class Base {
public:
class Thing {
public:
Thing(Base& b) : _b(b) {};
Thing& operator+= (const Thing p) { _b.add(*this, p); return *this; };
int k;
protected:
Base& _b;
};
void add(Thing &d, const Thing s) { d.k += s.k; }
};
template <class... Interfaces>
class Extensible : virtual public Base, virtual public Interfaces... {
class Thing : virtual public Base::Thing, virtual public Interfaces::Thing... {
};
};
class SomeInterface : Base {
void multiply(Thing &d, const Thing s) { d.k *= s.k; }
class Thing : public Base::Thing {
Thing& operator*= (const Thing p) {
//_b.multiply(*this, p); return *this; // <-- won't work of course
};
};
};
int main() {
Extensible<SomeInterface> a;
return 0;
}
【问题讨论】:
标签: c++ inheritance c++11 variadic-templates