我想知道无论如何要将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”,这是程序员实际输入的内容?
非常感谢。
答案 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>
,您仍然可以毫无问题地将一个变量分配给另一个变量。这种逻辑错误几乎不可能在类型系统中传达,如果你关心那个......
我非常相信静态类型检查,但它有其局限性,并且针对您正在制作的应用程序测试特定逻辑,您将只需要单元测试来验证正确的行为。