【问题标题】:Creating a class that can store a int, std::string or double in one member variable创建一个可以在一个成员变量中存储 int、std::string 或 double 的类
【发布时间】:2019-09-28 16:49:17
【问题描述】:

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

这是这个 Field.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;

};

我应该能够做的是允许类方法 AddField() 能够接受 int、double 或 std::string 并将其存储在字段成员变量中。这将是一个示例场景:

我曾考虑为 AddField 添加重载方法,但由于成员变量必须是一种类型,我该如何存储该值?

【问题讨论】:

  • 这种场景是std::variant所擅长的
  • 使用std::variantstd::any。如果您没有 c++ 17,请使用 boost::variantboost::any
  • 是的,我就是这么做的,哈哈。我想写我的问题让我想得更清楚了哈哈谢谢你!
  • 从未使用过std::variant...我查一下

标签: c++


【解决方案1】:

基本上有两种方法:

  • 存储并将其转换为字符串
  • 使用标记的联合。

标记的联合方法可能更干净。在 C++17 之前,可以使用匿名联合来实现标记联合。使用 c++17,您可以使用变体。

C++ 核心指南的规则182 有一个很好的例子。

【讨论】:

    猜你喜欢
    • 2022-01-18
    • 1970-01-01
    • 2020-01-11
    • 1970-01-01
    • 2015-08-30
    • 2012-04-28
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    相关资源
    最近更新 更多