C++ 是否可以在c+中使用类似mixin的模式覆盖功能+;

C++ 是否可以在c+中使用类似mixin的模式覆盖功能+;,c++,templates,C++,Templates,假设我有以下课程: 类基{ 公众: 虚拟int do_something()=0; 受保护的: 虚拟整数给出中间结果(int)=0; int m_一些共享资源; }; Foo类:公共基础{ 公众: 虚int do_something()重写{return give_intermediate_result(1);} 受保护的: 虚int-give_-intermediate_-result(inta)重写{returna*2;} }; //像这样的: FooMixinA类:公共虚拟基{ 受保护的:

假设我有以下课程:

类基{
公众:
虚拟int do_something()=0;
受保护的:
虚拟整数给出中间结果(int)=0;
int m_一些共享资源;
};
Foo类:公共基础{
公众:
虚int do_something()重写{return give_intermediate_result(1);}
受保护的:
虚int-give_-intermediate_-result(inta)重写{returna*2;}
};
//像这样的:
FooMixinA类:公共虚拟基{
受保护的:
虚拟整数给出中间结果(int)覆盖;
};
类FooMixinB:公共虚拟基{
公众:
虚拟int do_something()覆盖;
};
我想做的是这样的:

foomyfoo(…);
它基本上应该用
FooMixinB
的dou somethin实现覆盖
Foo
的dou somethin实现,并用
FooMixinA
的dou somethin实现
给出中间结果。此外,我希望mixin能够取代其他mixin功能,即。E混合的顺序很重要,因为一个混合可能会使用另一个混合(即
get\u intermediate\u result
)。 同时,他们都应该能够访问一些共享的底层资源

我可以这样做吗?如果可以,我将如何处理

template<class Base, template<class>class...Mixins>
struct Foo:Base{};
template<class Base, template<class>class M0, template<class>class...Mixins>
struct Foo<Base, M0, Mixins...>:M0<Foo<Base, Mixins...>>{};

struct Base{
  virtual int A()=0;
  virtual int B()=0;
  virtual ~Base()=default;
};

template<class Base>
struct MixinA:Base{
  int A() final{ return 3; }
};
template<class Base>
struct MixinB:Base{
  int B() override{ return -1; }
};
template<class Base>
struct MixinB2:Base{
  int B() final{ return 0; }
};

using Bob=Foo<Base, MixinA, MixinB2, MixinB>;

std::unique_ptr<Base> pBase=std::make_unique<Bob>();
std::cout << pBase->A() << pBase->B() <<'\n';

这很容易。对于从左到右,你需要变得更加有趣。

要想更深入地理解,请阅读奇怪的重复模板模式(CRTP)如何处理构造函数?@milck上述问题没有,最初的问题没有构造函数。但是您可以使用元组,其中每个mixin获取一个元组元素,而base获取最后一个元组元素。
template<class Base, template<class>class M0, template<class>class...Mixins>
struct Foo<Base, M0, Mixins...>:Foo<M0<Base>, Mixins...>{};
template<template<class>class...Mixins>
struct Foo:Base{};
template<template<class>class M0, template<class>class...Mixins>
struct Foo<M0, Mixins...>:M0<Foo<Mixins...>>{};