C++11 在自由函数上使用熟的用户定义文字有什么原因?
与免费函数相比,我看不出使用用户定义的文字有什么好处。后者在语法上可能更好,但我看到了一些问题:C++11 在自由函数上使用熟的用户定义文字有什么原因?,c++11,C++11,与免费函数相比,我看不出使用用户定义的文字有什么好处。后者在语法上可能更好,但我看到了一些问题: 为了避免常用命名文字之间的冲突,您可能需要使用特定的作用域和using namespace指令,因为您不能限定文字 对于整数和浮点类型,需要使用最宽的参数 第一点可能特别令人讨厌,因为它要求您在发生冲突时以某种方式构造代码。这也意味着在头文件中使用文本可能是个坏主意。例如,执行以下操作需要引入命名空间: // Thing.h using namespace unit_literals; cla
- 为了避免常用命名文字之间的冲突,您可能需要使用特定的作用域和
指令,因为您不能限定文字using namespace
- 对于整数和浮点类型,需要使用最宽的参数
// Thing.h
using namespace unit_literals;
class Thing {
Property<Dimension> length{5.0_cm};
};
//Thing.h
使用名称空间单位文字;
阶级事务{
属性长度{5.0_cm};
};
使用自由函数,您可以在发生碰撞时进行限定
// Thing.h
class Thing {
Property<Dimension> length{units::cm(5.0)};
};
//Thing.h
阶级事务{
属性长度{units::cm(5.0)};
};
使用自由函数还可以避免为浮点和整数类型写入用户定义的文字:
Dimension cm(float in) { return ...; }
Property<Dimension> length{units::cm(5.0)}; // ok
Property<Dimension> length{units::cm(5)}; // ok
维度cm(浮动){return…;}
属性长度{units::cm(5.0)};//好啊
属性长度{units::cm(5)};//好啊
与自由函数相比,有什么理由更喜欢使用熟的用户定义文本?注意
使用名称空间
仅限于它所使用的范围,因此如果您能够很好地找到它,那么在标头中使用它可能不会太糟糕。至于你剩下的问题,我帮不了你……:)注意使用名称空间
仅限于它所使用的范围,因此如果您能够很好地找到它,那么在标头中使用它可能不会太糟糕。至于你剩下的问题,我帮不了你……:)