gpt4 book ai didi

c++ - 虚拟/非虚拟继承

转载 作者:行者123 更新时间:2023-11-30 05:26:01 30 4
gpt4 key购买 nike

假设我有一个基类:

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

最佳答案

抱歉,我看不到您要解决的现实世界问题。这意味着我无法就如何以更好的方式解决该问题提供建议,而只能针对所述技术问题提供技术解决方案。使用这样的技术解决方案可能会适得其反。

不过,技术解决方案可以是这样的:

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

免责声明:以上代码未经编译器审查。

关于c++ - 虚拟/非虚拟继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38004574/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com