如何制作在编译时仅继承两个基类之一的C ++类?

问题描述 投票:0回答:2

第一次发布。这是一个关于如何在C ++中执行某些操作的一般性问题。为了不浪费您的时间,我只是将其概括化。但是,如果您的回答是“为什么要做这样愚蠢的事情?”,我将在下面提供详细信息。

一般问题

我有一个带有通用代码的基类(SPIBase)。我有两个继承它的类,它们具有明显不同的实现(SPIMaster,SPISlave)。在这两个类的每一个中,我都公开相同的公共/受保护的功能。我想编写一个继承自这两个类之一的类。我应该如何去做?

详细信息

我正在建立一些微电子学的库(ESP8266)。我使用Arduino IDE,并且库使用C ++。众所周知,SPI是用于在两个微控制器或一个微控制器与类似传感器之间进行通信的方法论/协议。微控制器始终是主机,其他设备/传感器始终是从机。主机完全控制SPI中的通信过程。从设备通常是相对被动的。我已经编写了只在两个ESP8266微控制器之间工作的库,以形成类似TCP / IP的协议,其中一个可以向另一个未经请求的用户发送消息。基本上,主/从问题是隐藏的,使用该库的开发人员可以按照自己喜欢的方式和方向设置协议。 (即客户端/服务器/对等消息传递,发送/响应,流等)。虽然主/从问题是隐藏的,但显然,一个ESP8266必须使用一个基本实现,而另一个ESP8266必须使用另一个基本实现。

我现在想编写实现流/文件传输的层。此类将使用两个中间类中的一个或另一个,但除它们继承于哪个类外,它们将是相同的。他们都将是发送者和接收者。我宁愿没有两个完全相同的类,它们的实现也完全相同。在这种情况下,我真的不希望一个代码链的任何部分位于另一台设备上。经过研究后,我最初的想法证明是不可能的……基本上...让使用开发人员的库在其主程序文件中使用#define MASTER或#define SLAVE,流类将基于此继承一个或另一个类。我很快发现#define在下游不可见。是否有一些C ++设计方法论/模式可以得到我想要的结果?谢谢您的时间。

第一次发布。这是一个关于如何在C ++中执行某些操作的一般性问题。为了不浪费您的时间,我只是将其概括化。但是,如果您的回答是这样的,“您为什么要做...

c++ strategy-pattern
2个回答
0
投票
您可以使用模板。例如:
© www.soinside.com 2019 - 2024. All rights reserved.