【发布时间】:2020-03-17 19:53:18
【问题描述】:
我创建了一个 C++ 类,它有一个公共成员,它是一个指向不相关类的指针。这里是:
class ADS_1x15 : public Sensors {
public:
ADS_1x15(uint8_t addr = 0x48, adsGain_t gain = GAIN_TWOTHIRDS, String = "");
Adafruit_ADS1115* ads;
};
它是与 Adafruit ADS1115 ADC 执行不同操作的其他一些类的基类,因此成员 ads 可用于任何后代类。
有一个非常相似的 Adafruit ADC,称为 ADS1015,我希望我的课程能够使用这两个 ADC 中的任何一个。当然,Adafruit_ADS1015 与 Adafruit_ADS1115 是完全不同的对象。在我的基类中,我希望能够传入一个参数,该参数告诉类“包括指向 Adafruit_ADS1015 或 Adafruit_ADS1115 的指针,但无论使用哪一个,都要使指针的变量名称相同:@987654323 @"。这两个对象的所有方法都是相同的,所以一旦我将ads 指向正确的对象,我的类中的所有内容都会正常工作,无论使用哪个 ADS。
这可能吗?
【问题讨论】:
-
Adafruit_ADS1015和Adafruit_ADS1115是否共享一个公共基类? -
如果它们共享一个基类,您可以使用单个指针。如果没有,请考虑使用
union,或者为清楚起见使用两个指针。 -
@tadman 我几乎每次都更喜欢
std::variant而不是union。 -
@aschepler 如果可用 (C++17),是的,那也是!
-
您可以使
ADS_1x15成为模板类,其中ads的类型在模板参数中指定。然后ADS_1x15的用户可以决定使用哪种类型。否则,就像你说的那样,由于Adafruit_ADS1015和Adafruit_ADS1115具有相同的方法,那么多态性对于这种情况是一个不错的选择,使它们派生自一个公共基类,然后使ads成为该类型的指针。