C ++将双参数解析为字符串?

时间:2013-11-15 15:15:02

标签: c++ string function arguments

我想知道无论如何要将double,int或其他数字类型参数解析为字符串?

例如

功能的定义:

 GetConfiguration(double mag, string &name, long &position, double &numAper)

致电:

double myPag;
string myName;
long myPosition;
double myNumAper;
GetConfiguration(myPag, myName, myPosition, myNumAper);

只是将值传递给参数,我能否知道第三个参数类似于“myPosition”,这是程序员实际输入的内容?

非常感谢。

1 个答案:

答案 0 :(得分:3)

在这种情况下,文字和变量之间的区别在于文字是右值,变量可以是左值。这就是为什么文字参数与非const参考参数不匹配的原因。

然而,在这种情况下,没有任何意义来测试它。如果需要类型为double的值,则应允许使用生成double的所有内容。如果你不“出”参数,OTOH ......

不要使用“out”参数;使用元组返回(make_tuple)和tie代替:

double myPag;
string myName;
long myPosition;
double myNumAper;
std::tie(myPag, myName, myPosition, myNumAper) = getConfiguration();

如果您担心正确的顺序(正如您在评论中提到的那样),只需让函数返回struct

struct Configuration {
    double myPag;
    string myName;
    long myPosition;
    double myNumAper;
};

auto configuration = getConfiguration();
do_stuff(configuration.myName);

如果您仍然不相信并且想要更多的静态安全性,那么对于语义上不同类型的每个值(伪C ++),您需要一个强类型:

using Pag = StrongTypedef<double, struct PagTag>;
using NumAper = StrongTypedef<double, struct NumAperTag>;

Pag myPag;
NumAper myNumAper;

这将确保您不会与这些不匹配。

但是,没有什么能阻止您在两个语义相同的类型之间进行不匹配的分配!

如果您有两个类型的变量,比如StrongTypedef<double, struct SomeTag>,您仍然可以毫无问题地将一个变量分配给另一个变量。这种逻辑错误几乎不可能在类型系统中传达,如果你关心那个......

好吧,只需编写单元测试。

我非常相信静态类型检查,但它有其局限性,并且针对您正在制作的应用程序测试特定逻辑,您将只需要单元测试来验证正确的行为。