我创建了一个名为JSON的类,它有三种数据类型(string
,int
,bool
)。我想创建一个可以获得任何类型的构造函数。
我不想为这三种数据类型创建三个单独的构造函数,但是可以处理所有这些构造函数。
我只创建一个构造函数的原因是因为我想要一个可以处理未知数量的变量和未知变量类型的构造函数。
以下构造函数可以获得类型为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) {}
我怎样才能做到这一点?
答案 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
类用于表示可以使用int
,std::string
或bool
构建的值。
然后,您可以在initializer_list中接收这些实例:
struct Json {
Json(std::initializer_list<Value> values);
};
因此,您收到了Value
的列表,其中每个列表都可以使用int
,std::string
或bool
构建。这是一个示例 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;
}