假设我有一个基类:
struct A{
virtual void foo() = 0;
};
然后假设我有一个像这样的派生类:
struct B : public virtual A{
void foo(){ /*something*/ }
};
但是我也想要这样的B
副本(请注意,除了不进行虚拟继承之外,它在各方面都是相同的):
struct B : public A{
void foo(){ /*same something*/ }
};
只有一个定义,是否存在某种模板法术。
这样的东西?
struct B : public InheritanceHelper<A> {
void foo(){ /*same something*/ }
};
答案 0 :(得分:1)
对不起,但我没有看到你试图解决的现实世界问题。这意味着我无法就如何以更好的方式解决这个问题提出建议,而只是针对所述技术问题的技术解决方案。使用这样的技术解决方案可能会适得其反。
仍然,技术解决方案可以这样:
struct A
{
virtual void foo() = 0;
};
struct Virtual: virtual A {};
struct Non_virtual: A {};
template< class Base >
struct B_: Base
{
void foo() override {}; // Something.
};
using B_virtual = B_<Virtual>;
using B_nonvirtual = B_<Non_virtual>;
免责声明:上述代码未经编译审核。