2012-11-10 13 views
5

C++ 1x支持文字后缀(例如,http://ecn.channel9.msdn.com/events/GoingNative12/GN12Cpp11Style.pdf)。我正在使用gcc 4.7并想为我们的系统引入一些单元。最值得注意的是,我们一半的代码使用度数和另一半弧度(由于各种第三方库),显然这总是导致错误的原因。可以说,例如“Radian angle = 90_deg;”会很有帮助。用于单元的C++可用的“文字后缀代码”

我已经研究过如何实现这一点,它看起来很可行,但是它需要一些时间才能正确使用。所以我想知道是否有完成/测试的实现已经实现了所有可以使用的实现(不需要每个C++开发人员重新实现它,是否有?)。除了rad/deg,我正在寻找长度测量值(mm,cm,m)。我已经使用了Google,但没有找到任何可用的东西。

有没有人知道例如可以使用的SI系统?

+1

[本参考](http://en.cppreference.com/w/cpp/language/user_literal)具有几个例子。 –

+0

谢谢,但我没有找到示例/参考。我相信我可以实施一整套文字和演员操作来处理我的需求。然而,这需要一定的时间来实现,而更多的则是测试所有的用例。由于SI系统对每个人都是一样的,所以我会假设成百上千的C++开发人员都这样做 - 所以我希望有人做了一个干净且经过测试的实现,可以“只”使用它。我不想重新发明轮子。 – Frankie

+3

+1不想重新发明车轮。这是**而不是**你正在寻找的东西,但是Boost提供了[Boost.Units]下的模板化版本(http://www.boost.org/doc/libs/1_52_0/doc/html/boost_units.html)。我很好奇你会得到什么其他答案。 – Ali

回答

2

使用boost.units

您将获得预期收益:能够安全地处理以不同单位表示的指标。
与升压单元的语法并不坏:

quantity<length> dx(2.0*meter); 
+1

没有理由boost.units不能使用_with_用户定义的后缀... – bames53

+0

@ bames53我不想这么说。这就是提升。单位不提供UDL。 – log0

+0

你提到我获得同样的好处。不过,假设我找到了一个C++ 11x实现,为什么Boost会更可取? – Frankie