C++ 创建可以在一个成员变量中存储int、std::string或double的类

C++ 创建可以在一个成员变量中存储int、std::string或double的类,c++,C++,我必须创建一个类,该类有一个名为m_Value的成员变量,该变量的类型为std::string,但应该能够接受来自用户的输入,可以是double、int或std::string 这里是这个字段。h: class Field { public: Field(std::string name, std::string value); std::string GetName(); std::string GetValue(); void Print(); pri

我必须创建一个类,该类有一个名为m_Value的成员变量,该变量的类型为std::string,但应该能够接受来自用户的输入,可以是double、int或std::string

这里是这个字段。h:

class Field 
{
public:
    Field(std::string name, std::string value);

    std::string GetName();
    std::string GetValue();

    void Print();

private:
    std::string m_Name; 
    std::string m_Value;
};
还有另一个类,它有一个方法来实例化这个类,称为Element:

class Element
{
public:
    Element();
    void Print();

    Field* AddField(std::string fieldName, std::string fieldValue);
    Field* GetField(std::string fieldName);

private:
    std::vector<Field*> m_Fields;

};
类元素
{
公众:
元素();
作废打印();
字段*添加字段(标准::字符串字段名,标准::字符串字段值);
字段*GetField(标准::字符串字段名);
私人:
std::向量m_场;
};
我应该能够做的是允许类方法AddField()能够接受int、double或std::string,并将其存储在field成员变量中。这将是一个示例场景:


我曾想过为AddField添加重载方法,但既然成员变量必须是一种类型,那么如何存储该值呢?

基本上有两种方法:

  • 存储它并将其转换为字符串
  • 使用标记的联合
标记的联合方法可能更干净。在C++17之前,标记的联合可以用匿名联合实现。使用c++17可以使用变体


< C++核心准则的规则有一个很好的例子。

这种场景是好的借口<代码> STD::变型< /C> >或<代码>:如果你没有C++ 17,请使用<代码> Boo::变体< /C> >或者代码> Boo::Yea,我只是做了那个LOL。我觉得写我的问题让我想了一点更清楚的LOL谢谢TAHT!从未使用过std::variant。。。我查一下