如何创建未知数量的变量和未知类型变量的构造函数

时间:2016-12-16 15:12:31

标签: c++ json constructor

我创建了一个名为JSON的类,它有三种数据类型(stringintbool)。我想创建一个可以获得任何类型的构造函数。 我不想为这三种数据类型创建三个单独的构造函数,但是可以处理所有这些构造函数。

我只创建一个构造函数的原因是因为我想要一个可以处理未知数量的变量和未知变量类型的构造函数。

以下构造函数可以获得类型为JSON{1, 2, 3, 4, 2, 13, 3, ..., n}的输入,其中n为int类型, 但不是类型:JSON{1, 2, 3, "hello", 2, 13, true, ..., n}

JSON(initializer_list<int> init) : v(init) {}

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:2)

由于您可以发送有限数量的类型,我将创建一个可以使用这些值构建的结构:

struct Value {
    Value(int i);
    Value(std::string s);
    Value(bool b);

private:
    // hold it using boost::variant, std::variant or an union.
};

Value类用于表示可以使用intstd::stringbool构建的值。

然后,您可以在initializer_list中接收这些实例:

struct Json {
    Json(std::initializer_list<Value> values);
};

因此,您收到了Value的列表,其中每个列表都可以使用intstd::stringbool构建。这是一个示例 Live at Coliru

答案 1 :(得分:1)

您可以创建一个以数据类型为成员的自定义类,并将此类对象传递给构造函数:

struct MyData {
    std::string strJsonVal;
    int intJsonVal;
    bool blnJsonVal;
};

然后,在你的Json类中,你可以将它传递给构造函数并从参数对象中获取值:

Json(MyData strctMyData)
{
   strJsn = strctMyData.strJsonVal;
   intJsn = strctMyData.intJsonVal;
   blnJsn = strctMyData.blnJsonVal;
}