虚拟/非虚拟继承

时间:2016-06-24 02:03:36

标签: c++ templates inheritance virtual

假设我有一个基类:

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*/ }
};

1 个答案:

答案 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>;

免责声明:上述代码未经编译审核。