2016-12-16 70 views
1

我创建了一个名为JSON的类,它有三种数据类型(string,int,bool)。我想创建一个可以获取这些类型的构造函数。 我不想为三种数据类型创建三个独立的构造函数,但可以处理所有这三种数据类型的构造函数。如何创建未知数量的变量和未知类型变量的构造函数

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

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

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

我怎样才能做到这一点?

+0

'的std :: variant'可以帮助 – Ap31

+0

的std ::变种是不工作... –

+0

'的boost :: variant'可以帮助 –

回答

1

您可以创建与您的数据类型作为其成员的自定义类,并通过这个类对象的构造器:

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

然后,在你Json类,你可以将它传递给构造函数,并获得

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

为什么有些人将此标记为不是答案 – glant

+1

您应该举例说明您的意思,以及更多解释。 –

+0

@GuillaumeRacicot这个陈述的哪一部分是不可理解的,它需要一个代码来支持它 – glant

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类是有以表示可与一个int,一个std::stringbool构成的值。

然后,你可以在你initializer_list收到这些实例:

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

所以有您接收的每一个可以与int,一个std::stringbool构造的Value列表。这里有一个例子Live at Coliru

+0

这就是JsonCpp如何做到的。 –

+0

Value(int i)的用途是什么;'? –

+0

@JohnTraveli它是一个构造函数,它将'int'作为参数。 –