C ++参数结构支持字符串和整数?

时间:2014-10-08 22:58:57

标签: c++ parameters var

我怎样才能更轻松地做到这一点:

struct Parameters {
public:
    int Parameter1;
    std::string Parameter1;
    int Parameter2;
    std::string Parameter2;
}

Isn¬" var"在C ++中像.NET一样吗?我需要参数能够是整数和字符串。

3 个答案:

答案 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;
};

对于工厂,工厂将是一个可以根据某些标准创建参数对象的对象。它会返回一个指向基类的指针。

注意:除非您处于严格约束的平台上,例如嵌入式系统,否则不要担心重叠内存位置以节省空间。