gpt4 book ai didi

c++ - 模板类 C++/Qt

转载 作者:行者123 更新时间:2023-11-30 03:03:32 24 4
gpt4 key购买 nike

我有一个应用程序将从另一个应用程序接收消息。这些消息将是 XML 格式的字符串,并且它们将包含一个 <messageType>。标签。消息类型会将此消息标识为一种内部消息。以下代码显示了我的内部消息结构。

namespace
Application1{

enum ApplicationAttributes{
ApplicationName = 1000,
Start,
Stop,
Pause,
Save,
Discard,
SelectRunway,
DoAlignment,
RedoAlignment,
AlignmentOK,
DoCalibrationStage1,
SetCalibrationStage1,
SetCalibrationStage2,
SetCalibrationStage3,
CancelCalibration,
CalibrationOK
};


struct Alignment{
int x;
int y;
int error;
};

struct Calibration{
int x;
int y;
int error;
};

}

对齐和校准是两个内部消息结构。

我想做的是构建一个“消息解释器”,它将接收一个 XML 字符串,对其进行解码并返回上面显示的任何一个结构;所以如果<messageType>是'对齐',消息解释器将构建一个对齐结构,并返回它。

所以最终,我试图制作一个模板函数,它可以根据我从 <messageType> 中读到的内容返回任意结构。 .

我的目标是否明确?我的方法正确吗?

让我知道我是否应该澄清,或者我是否应该采取不同的方法。

最佳答案

我认为模板函数没有意义。您的输入始终是一个字符串,而 C++ 无法仅根据返回类型来区分函数签名 - 所以我不知道模板如何提供帮助 - 类型参数是什么?

我建议让您的函数成为一个普通函数,它解析出 messageType 并基于它分配一个结构 - 您可以为此使用任何您想要的结构。

诀窍是(在我看来)从同一个空基类派生所有的内部消息类——然后你可以从你的函数返回一个指向那个基类的指针,它会保存任何类型已创建。

在 std::pair 中返回一个枚举和指针是个好主意,您可以使用它来确定创建的正确派生类型,这样您就可以将结果直接转换为正确的派生类型一个 static_cast。

关于c++ - 模板类 C++/Qt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9296952/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com