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

支持字符串和整数的C++参数结构?,c++,parameters,var,C++,Parameters,Var,我怎样才能更容易地做到这一点: struct Parameters { public: int Parameter1; std::string Parameter1; int Parameter2; std::string Parameter2; } 在C++中,VaR中没有VAR吗?我需要参数来做整数和字符串。 C++中有关键字“Auto'”,但它是C++ + 0x和C++ 1x,编译器决定编译类型,编译后不能更改。 您可能正在寻找可以使用的类似boost:

我怎样才能更容易地做到这一点:

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

<>在C++中,VaR中没有VAR吗?我需要参数来做整数和字符串。

C++中有关键字“Auto'”,但它是C++ + 0x和C++ 1x,编译器决定编译类型,编译后不能更改。 您可能正在寻找可以使用的类似boost::variant:

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


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

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

工厂的使用 问题是,在解析字符串之前,您不知道参数的类型。最好的方法是将所有内容保持为字符串或创建工厂并使用基类。有关更多的研究,参见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;
};
至于工厂,工厂将是一个可以根据某些条件创建参数对象的对象。它将返回一个指向基类的指针


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

C的var类似于auto。这并不意味着变异。使用Boosix::Value.C++,不支持这种类型可以是多种类型。有一些模板库,例如boost::variant。可能不管它是什么,都应该是一个模板,例如一个函数templateit's working with object,它对迭代器非常有用:这与上面的注释完全无关。但是在问题描述的情况下,这有什么帮助呢?或者你只是在回答中写随机有用的东西,而不是真正有意义的解决问题中的实际问题?BTW,C++ 0x是过时的,我们有C++ 11甚至C++。14@Jarod42顺便说一下,在2011之前还有一些商店还在使用C++版本。一些编译器制造商还没有升级,一些商店也不会升级他们的工具,因为需要验证升级。