6

間もなくユーザー定義リテラル(UDL)ができたので、たとえばGCC 4.7では、、、、、などのリテラルの表現を容易にするためにそれらを使用する(物理)ユニットライブラリ( Boost.Units1+3iなど)を待ち望んで3m3meterます13_meter。この動作をサポートするUDLを使用してBoost.Unitsの拡張機能を作成した人はいますか?

4

2 に答える 2

5

誰もそのような拡張機能を持っていません。gcc (そしておそらく IBM?) だけが UDL を持っているので、しばらく時間がかかるかもしれません。私はある種のユニットが今から始まるtr2に入ることを望んでいます. そうなったらユニット用のUDLが出てくると思います。

これは機能します:

//  ./bin/bin/g++ -std=c++0x -o units4 units4.cpp

#include <boost/units/unit.hpp>
#include <boost/units/quantity.hpp>
#include <boost/units/systems/si.hpp>

using namespace boost::units;
using namespace boost::units::si;

quantity<length, long double>
operator"" _m(long double x)
{ return x * meters; }

quantity<si::time, long double>
operator"" _s(long double x)
{ return x * seconds; }

int
main()
{
  auto l = 66.6_m;
  auto v = 2.5_m / 6.6_s;
  std::cout << "l = " << l << std::endl;
  std::cout << "v = " << v << std::endl;
}

お気に入りのユニットを調べてこれを行うのはそれほど難しくないと思います。

これらをライブラリに入れることについて:リテラル演算子は名前空間スコープ関数です。接尾辞の競争は熾烈を極めます。私は(私が後押しされていれば)持っているでしょう

namespace literals
{
...
}

次に、ブーストユーザーができること

using boost::units::literals;

通常使用する他のすべての using Decl と共に。std::tr2::unitsそうすれば、たとえば、壊されることはありません。自分でロールする場合も同様です。

于 2012-02-14T01:40:43.350 に答える