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



如何更轻松地完成此操作:

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

C++中不存在像.NET中那样的"var"吗?我需要参数能够是整数和字符串。

您在C++中有关键字"auto",但它在C++0x和C++1x上,由编译器决定类型,编译后不能更改。

你可能正在寻找类似boost::variant的东西:http://www.boost.org/doc/libs/1_56_0/doc/html/variant.html

您可以使用Union,但您仍然需要在编译时知道要分配的类型。您可以通过使用带有隐式类型的模板来分配值来隐藏这一点,但在读取值时,您仍然需要知道合适的类型。但不确定这会有多有用。

您还可以使用多态性和您自己的(模板)包装类来代替内置类型。

我建议您考虑通用代码并设置为使用工厂。

工厂的使用
问题是,在解析字符串之前,您不知道参数的类型。最好的方法是将所有内容保持为字符串,或者创建一个Factory并使用基类。有关更多研究,请参阅"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;
  }
}

您的参数"list"可能是指向基类的指针容器(如果类型未知),也可能是派生结构的容器:

struct Parameter_Container
{
  std::vector<Int_Parameter>  parameters;
};

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

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

最新更新