我正在使用一个C++小型框架来在我的某些项目中使用,以静态链接为各种实用程序库。我想您可以将它与更具体的 Realm 相比较,以满足我的个人需求,并使用更简单的库(例如juce.),这是对其他事物的学习和体验,因此,我想花点时间正确地做事并理解我应用的技术。我目前正在linux中工作,但旨在使代码具有可移植性,因此这将使我可以将任何平台特定的代码编写到接口(interface)。

目前,我正在一个基本的消息传递系统上,我希望允许包含各种类型的对象的消息。我最初的想法是这样的:

class Message {
  virtual std::string type;
};
class DataMessage : Message {
  std::vector<std::string> *data;
};

我的问题是,识别消息为DataMessage并将其转换为实际类型或访问其包含的数据的最佳方法是什么?

我可以为上述类型使用字符串,但这不能保证每个子类实际上都具有唯一的类型ID。另外,我想知道字符串处理的开销是否会比其他方法慢(例如,我可以扩展枚举吗?)。

至于访问数据,如果我可以将Message转换为正确的类型,这不是问题。否则,我可以将虚拟函数作为访问器添加到基类中(但是我如何让它使用与基类中指定的返回类型不同的返回类型?如果该类不需要任何其他数据怎么办? ),或作为对数据起作用的辅助函数(但我宁愿将其用作类之间的数据传递机制,而不是回调样式框架)。

任何建议,替代方案或链接都将不胜感激。讨论不同的方法会很棒!

在此先感谢大家。

最佳答案

您可以使用DataMessage* pDataMessage = dynamic_cast<DataMessage*>(pMessage)。仅当pDataMessagepMessage对象时,DataMessage才有效。否则将是NULL

关于c++ - 识别继承的类的最佳方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11183471/

10-12 13:29