Virtual/Non-virtual继承
Virtual/Non-virtual inheritance
假设我有一个基地 class:
struct A{
virtual void foo() = 0;
};
然后假设我有一个像这样的派生 class:
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*/ }
};
抱歉,我没有看到您要解决的现实问题。这意味着我无法就如何以更好的方式解决该问题提供建议,而只能针对所述技术问题提供技术解决方案。使用这样的技术解决方案可能会适得其反。
不过,技术 解决方案可以像这样:
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>;
免责声明:以上代码未经编译器审查。
假设我有一个基地 class:
struct A{
virtual void foo() = 0;
};
然后假设我有一个像这样的派生 class:
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*/ }
};
抱歉,我没有看到您要解决的现实问题。这意味着我无法就如何以更好的方式解决该问题提供建议,而只能针对所述技术问题提供技术解决方案。使用这样的技术解决方案可能会适得其反。
不过,技术 解决方案可以像这样:
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>;
免责声明:以上代码未经编译器审查。