我怎样才能更轻松地做到这一点:
struct Parameters {
public:
int Parameter1;
std::string Parameter1;
int Parameter2;
std::string Parameter2;
}
Isn¬" var"在C ++中像.NET一样吗?我需要参数能够是整数和字符串。
答案 0 :(得分:0)
你有关键词' auto'在C ++中,但它是在C ++ 0x和C ++ 1x上,它是决定类型的编译器,它在编译后无法改变。
您可能正在寻找类似boost :: variant:http://www.boost.org/doc/libs/1_56_0/doc/html/variant.html
的内容答案 1 :(得分:0)
您可以使用Union,但您仍需要在编译时知道要分配的类型。您可以通过使用带有隐式类型的模板来分配值来隐藏它,但在读取值时仍需要知道相应的类型。不确定会有多大用处。
您也可以使用多态和您自己的(模板)包装类来代替内置类型。
答案 2 :(得分:0)
我建议您分解公共代码并设置使用工厂。
使用工厂
问题是在解析字符串之前,您不知道参数的类型。最好的方法是将所有内容保存为字符串或创建工厂并使用基类。有关更多研究,请参阅" c ++工厂设计模式示例"。
struct Base_Parameter
{
std::string& parameter_as_string;
virtual void extract_parameter(const std::string& parameter_string) = 0;
};
struct Int_Parameter : public Base_Parameter
{
int parameter_value;
void extract_parameter(const std::string& parameter_string)
{
std::istringstream param_stream(parameter_string);
param_stream >> parameter_value;
}
}
您的参数"列表"将是指向基类的指针容器(如果类型未知)或者您可以拥有后代结构的容器:
struct Parameter_Container
{
std::vector<Int_Parameter> parameters;
};
对于工厂,工厂将是一个可以根据某些标准创建参数对象的对象。它会返回一个指向基类的指针。
注意:除非您处于严格约束的平台上,例如嵌入式系统,否则不要担心重叠内存位置以节省空间。