与免费功能相比,使用熟用户定义的文字并没有太大的好处。后者在语法方面可能更好,但我看到一些问题:
using namespace
指令的特定范围,因为您无法限定文字第一点可能特别烦人,因为它要求您在遇到冲突时以某种方式构建代码。这也意味着在头文件中使用文字可能是个坏主意。例如,执行以下操作需要您引入命名空间:
// Thing.h
using namespace unit_literals;
class Thing {
Property<Dimension> length{5.0_cm};
};
使用免费功能,您可以在发生碰撞时获得资格。
// Thing.h
class Thing {
Property<Dimension> length{units::cm(5.0)};
};
使用自由函数还可以避免为浮点和整数类型编写用户定义的文字:
Dimension cm(float in) { return ...; }
Property<Dimension> length{units::cm(5.0)}; // ok
Property<Dimension> length{units::cm(5)}; // ok
有哪些理由更喜欢使用熟用户定义的文字而不是自由函数?