タグ

Faith and BraveとC++1yに関するUSAGI-WRPのブックマーク (2)

  • C++1y static if - Faith and Brave - C++で遊ぼう

    C++1yでは、D言語にもあるstatic ifが提案されています。 宣言と文が現れるあらゆるところで使えるようにしよう、ということで考えられいて、ユースケースもいろいろ考えられています。 まず、コンパイル時条件によって処理を呼び分ける基的な用途。 以下の、コンパイル時条件で分岐するような処理は、これまで関数オーバーロードでやっていました。 static if (sizeof(size_t) == 8) { // 64ビット版のコンパイルではこっち void fun(); } else { void gun(); } 次に、クラスの定数/型定義。 以下の階乗のような例は、これまで特殊化でやっていました。 template <unsigned long n> struct factorial { static if (n <= 1) { enum : unsigned long { val

    C++1y static if - Faith and Brave - C++で遊ぼう
  • 2012-10-15

    C++11では、ユーザー定義リテラルという、リテラル値に対して型付けするための機能が導入されました。C++11時点では、標準ライブラリでユーザーリテラルは使われてはいません。 C++1yでは、標準でいくつかのユーザー定義リテラルを提供する提案が出ています。 代表的なところでは、時間ライブラリのChronoがあります。このライブラリは、時間の間隔を表すseconds, millisecondsといった型が用意されているので、以下のようにして値を型付けできます: template <class Duration> void f(Duration d) {} seconds s(3); // 3秒 // 関数に渡す f(seconds(2)); // 2秒 f(milliseconds(3)); // 3ミリ秒 この提案では、std::suffixes::chrono名前空間に、Chronoライ

    2012-10-15
  • 1