C++ 是否有理由不使用单位强制类型?

C++ 是否有理由不使用单位强制类型?,c++,boost,types,units-of-measurement,boost-units,C++,Boost,Types,Units Of Measurement,Boost Units,在概念上,在我看来,使用基于单位强制的类型(米、秒、千克)将有巨大的好处(额外检查传递参数、在变量中去掉单位名称等),但我还没有遇到过这么多这样的代码。我看到的代码使用了自定义类型 我看到boost有一个units库(boost::units足够简单),但我没有看到很多证据表明它被广泛使用(在基本的google搜索中) 有什么好的理由吗 这些似乎意味着,一定有某种原因,这种做法没有像我预期的那样被广泛采用。也许是因为某种原因,麻烦比它们的价值还多 所以我问: 是否有理由不使用单位强制类型?具体来

在概念上,在我看来,使用基于单位强制的类型(米、秒、千克)将有巨大的好处(额外检查传递参数、在变量中去掉单位名称等),但我还没有遇到过这么多这样的代码。我看到的代码使用了自定义类型

我看到boost有一个units库(boost::units足够简单),但我没有看到很多证据表明它被广泛使用(在基本的google搜索中)

有什么好的理由吗

这些似乎意味着,一定有某种原因,这种做法没有像我预期的那样被广泛采用。也许是因为某种原因,麻烦比它们的价值还多

所以我问:


是否有理由不使用单位强制类型?具体来说,有没有理由不使用boost::units?

我认为这种技术之所以不流行,主要原因是它的拼写和阅读都非常困难和麻烦

希望这将最终成为C++11更受欢迎的编程风格,它将用户定义的文字添加到语言中,让您可以编写:

auto acc = 10_m / 1_s / 1_s;
而不是传统的

myframework::units::si<acceleration>::type acc = myframework::unit_cast<units::meters>(10.0)
   / myframework::unit_cast<units::seconds>(1)
   / myframework::unit_cast<units::seconds>(1);
myframework::units::si::type acc=myframework::unit\u cast(10.0)
/myframework::unit_cast(1)
/myframework::unit_cast(1);

我使用这个库编写正确的代码有很大的好处。不幸的是,它的使用难度是它应有的10倍。但这仍然是值得的,因为跟踪尺寸和单位是一场噩梦

boost units库非常聪明、强大且完整。问题是,文档几乎不可读。名称混乱、没有类型要求等问题很多。作者们列举了很多有帮助的例子,但不能代替一个更好的文档


仅供参考-我在2015年CPPcon上介绍了关于这一主题的教程。你可以在

找到哦,非常好。我不知道C++11中有这样的功能。但是很多问题不能用一些typedef来解决吗?@Catskul:你不能避免太多的冗长。看看Boost.Units,看看“专业设计”的解决方案有多好。我要说的是,这仍然比大多数程序员愿意忍受的噪音要大得多。通过使用typedef和不尝试在一个语句中完成所有操作(使用变量来保存贡献值),可以相当容易地简化“传统示例”。诚然,总是有一定程度的罗嗦,但你夸大了这有多难。