C++ 返回一组数据类型的最佳模式

C++ 返回一组数据类型的最佳模式,c++,regex,parameter-passing,C++,Regex,Parameter Passing,我有一个方法,它接受一个字符串,并使用正则表达式方法来确定该字符串是表示浮点、int还是字符串 返回结果float、int或string的最佳模式是什么 因此,我的基本方法原型是: void interpretString(const std::string &s); 返回结果float、int或string的最佳方法是什么? 目前,我将我的方法扩展如下: enum dataType { None, String, Float, Int }; dataType interpretStr

我有一个方法,它接受一个字符串,并使用正则表达式方法来确定该字符串是表示浮点、int还是字符串

返回结果float、int或string的最佳模式是什么

因此,我的基本方法原型是:

void interpretString(const std::string &s);
返回结果float、int或string的最佳方法是什么? 目前,我将我的方法扩展如下:

enum dataType { None, String, Float, Int };
dataType interpretString(const std::string &s,
                         string &s,
                         float &f,
                         int &i);
其中数据在相应的s、f或i变量中返回。这似乎不令人满意,因为我传递的数据永远不会被使用(例如,如果输入字符串是浮点,字符串和整数返回值将不被使用)


有更好的方法吗?

下面是使用函数对象的另一种方法:

struct Evaluation_Assignment
{
  virtual void assign(const std::string& s) = 0;
  virtual void assign(int i) = 0;
  virtual void assign(double d) = 0;
};

void Interpret_String(const std::string string_to_process,
                      Evaluation_Assignment& processor)
{
  if (interpretation_was_string)
  {
     processor.assign(s);
  }
}

使用
boost::variant
或定义您自己的
union
。类似boost any的东西可能是一种很好的返回类型。但是,如果将其限制为浮点、整数或字符串,则可能会使用具有类型信息(int、float string)的联合。是的,它不完整,需要由OP填写。至于性能,这不是标准。这个版本很好,因为您可以为不同的赋值传递不同的实例。它是作为一种替代方案提出的。