问题描述
我有很多类似的界面。我有一个类模板,该模板可以实现这些接口并实现那些接口共有的大多数操作。结果,我在这些界面上使用了mixin。
不幸的是,其中一些接口缺少某些常用方法。
struct Intf1
{
virtual void f() = 0;
};
struct Intf2 {}; // Missing f.
我想应用混入
template <class T>
struct Mixin
: public T
{
virtual void f() override {};
};
对于基类,恰好是基类声明了混合方法覆盖的虚方法f
。所以,基本上我正在寻找一些元编程技术
template <template <class> class Mixin,class T> using Magic = ...;
使得Magic<Mixin,Intf1>
是Mixin<Intf1>
,而Magic<Mixin,Intf2>
是Intf2
。
目前,我正在使用单独的特征来检查基类中是否有可用的方法,但是此解决方案存在一些问题:
- 我必须重申功能签名。
- 我不确定该方法是否是虚拟方法(尽管看起来可以做到)。
- 由于类型转换/常量性,我可能会尝试覆盖与我的方法签名不完全匹配的方法。
我希望可能会有更好的解决方案。如果我的Mixin
是导致替换失败的类,那么我将尝试执行以下操作:Godbolt。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)