RTC_DS3231
是私人继承:
class RTC_DS3231 : RTC_I2C
I无法制作
RTC_I2C *rtc;
if(use_RTC_M41T83)
{
rtc = new RTC_M41T83;
}
else
{
rtc = new RTC_DS3231;
}
继承class RTC_DS3231 : RTC_I2C
,因为我无法修改的库中的声明。在C ++中解决这是什么好方法? 我知道在运行时选择C++变量类型选择 但是它不起作用,因为继承是
public
。
您基本上有2个选项:
class RTC_DS3231 : RTC_I2C
自己添加抽象
std::variant<RTC_M41T83, RTC_DS3231>
/*const*/auto rtc_var = use_RTC_M41T83 ?
std::variant<RTC_M41T83, RTC_DS3231>{RTC_M41T83{}} :
std::variant<RTC_M41T83, RTC_DS3231>{RTC_DS3231{}};
std::visit([/*..*/](auto& rtc){ return rtc.some_method(/*..*/); }, rtc_var);