C++ 虚拟/非虚拟继承
假设我有一个基类:C++ 虚拟/非虚拟继承,c++,templates,inheritance,virtual,C++,Templates,Inheritance,Virtual,假设我有一个基类: struct A{ virtual void foo() = 0; }; 然后假设我有这样一个派生类: struct B : public virtual A{ void foo(){ /*something*/ } }; struct A { virtual void foo() = 0; }; struct Virtual: virtual A {}; struct Non_virtual: A {}; template< class
struct A{
virtual void foo() = 0;
};
然后假设我有这样一个派生类:
struct B : public virtual A{
void foo(){ /*something*/ }
};
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>;
但是我还想要一个这样的B
副本(请注意,除了没有虚拟继承之外,它在各个方面都是相同的):
有没有一种模板魔法可以用一个定义来实现这一点
像这样的东西
struct B : public InheritanceHelper<A> {
void foo(){ /*same something*/ }
};
结构B:公共继承帮助器{
void foo(){/*相同的东西*/}
};
很抱歉,我看不出您试图解决的实际问题。这意味着我不能就如何更好地解决这一问题提供建议,而只能提供所述技术问题的技术解决方案。使用这样的技术解决方案可能适得其反 不过,技术解决方案可以是这样的:
struct B : public virtual A{
void foo(){ /*something*/ }
};
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>;
结构A
{
虚拟void foo()=0;
};
结构虚拟:虚拟A{};
非虚拟结构:A{};
模板免责声明:上面的代码没有经过编译器审查。这实际上是完美的(我不敢相信答案就在眼前!)在这一点上,为a和B编写构造函数是一个非常有趣的挑战:)。