如何检查结构是否有某个变量?

时间:2016-01-22 14:44:15

标签: c++ struct void-pointers

所以我有以下两个结构。假设我有一个无效指针,根据情况,指向包或苹果。如何检查它指向哪种结构类型,以便我可以取消引用它?

struct product
{
        int price;
        string name;
};

struct fruit : product
{
        int weight;
};

product bag;
fruit apple;

编辑:所以这只是我在新工作中使用的代码的简化版本。我需要检查一个特定的变量,但是像水果中的权重变量一样,有时它会被一个空指针传递,有时它不是。已经有很多代码,所以从void指针改变它会太多了。我需要检查权重变量是否存在,然后根据其中的值做一些事情。

3 个答案:

答案 0 :(得分:7)

不要在C ++中使用void*。在客户端代码中使用void*作为真实数据对象是有效的几乎从来没有这种情况。

在您的情况下,您需要使用void*而不是product*,并声明product*虚拟的析构函数。这样,您就可以使用dynamic_cast来测试实际对象。

更好的选择是仔细设计您的课程,介绍正确的虚拟功能,并确保从不需要知道对象的实际类型。但这是一个单独问题的话题。

答案 1 :(得分:1)

考虑到评论(void*在现有API中已根深蒂固),解决方法将是两步演绎。首先,static_cast<product*>您的void*指针。接下来是dynamic_cast product*fruit*的{​​{1}}。

您需要向product添加虚拟方法,否则dynamic_cast将无效。

答案 2 :(得分:0)

只有无效指针,你才能做到。 Void指针从变量中删除所有类型信息。如果必须在运行时知道类型,则必须使用类似std::type_index的内容。