【发布时间】:2021-05-01 16:51:25
【问题描述】:
想象以下情况
- 你有一个指向变量的指针:
fooVar * - 您可以使用如下函数获取变量的类型:
get_type(fooVar* foo),它返回一个 int 值bar - 然后您可以在
enum中查找返回值bar所属的类型,例如1->type_int - 然后根据类型,您可以调用以下函数之一来获取值:
double get_double(fooVar*)、int get_int(fooVar*)、...
目标是
将这些函数(C 库的简化版本)包装到 CPP 类中。
问题是
- 我想存储所有变量的列表。
- 如何统一返回变量的当前值?
我尝试创建一个 BaseType 并从中派生其他类型,如下所示:
BaseClass
|--> IntClass - int getValue()
|--> DoubleClass - double getValue()
'--> BoolClass - bool getValue()
然后我可以为每个具有正确返回类型的派生类创建一个成员函数.getValue()(如上所示)。
由于我将指向所有变量的指针存储在类型BaseClass* 的列表中,我的编译器现在抱怨getValue() 在我尝试调用它时没有定义。
第二种解决方案可能是创建double getAsDouble()、bool getAsBool()、int getAsInt(),然后在类型不可转换或不合适时抛出错误。但这也感觉不对。
第三种解决方案可能是不仅存储指针,而且存储它指向的类型(派生类的)。稍后我可以投射 BasePointer。但这真的是个好主意吗?
另一个解决方案可能涉及std::variant,但我认为这有点矫枉过正 - 对吧?
问题是:您将如何在 C++ 中做到这一点?有没有一种干净的方法来实现这一目标?
旁注:我在这里读到的关于 SO 的主题都不适合,这对我来说就像一个标准问题,所以我想学习一些专业程序员解决这类问题的方法。
【问题讨论】:
标签: c++ pointers inheritance idioms