gpt4 book ai didi

C++:条件继承是否可能

转载 作者:可可西里 更新时间:2023-11-01 18:06:43 26 4
gpt4 key购买 nike

我正在从事微处理器 (Arduino) 项目。我的库 Foo 继承自现有的库 Basic。后来我将Basic的功能扩展到另一个类Advanced。但是,Advanced 使硬件更加困难,使得其中一个已经制作的演示无法使用。

我的想法如下:

class Foo:
#ifndef USE_BASIC
public Advanced
#else
public Basic
#endif
{
...
}

并将#define USE_BASIC放入我的演示代码中:

#define USE_BASIC
#include <Foo.h>

但是 Foo 没有继承自 Basic。我在这里做错了吗?或者是否有其他方法可以解决这个问题?

最佳答案

一个更简洁的解决方案是使用模板:让编译器根据模板参数选择基类。

举个例子:

 #include <type_traits> //for std::conditional


//here you go with your own class
template<bool UseAdvanced>
class Foo : public std::conditional<UseAdvanced, Advanced, Basic>::type
{
//your code
};

下面是你将如何使用这个类:

Foo<true>   fooWithAdvanced; //it uses Advanced as base class
Foo<false> fooWithBasic; //it uses Basic as base class!

嗯,这是一种方法。但是有更好的方法。特别是,我将按以下方式设计类模板,其中模板参数将作为 base 类。这样设计会更灵活。

 template<typename Base>
class Foo : public Base
{
//your code
};

因此您可以使用BasicAdvanced任何其他类作为基类,只要它支持Foo 及其用法:

 Foo<Advanced>  fooWithAdvanced;
Foo<Basic> fooWithBasic;
Foo<OtherBase> fooWithOtherBase;

希望对您有所帮助。

关于C++:条件继承是否可能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16358804/

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