タグ

関連タグで絞り込む (1)

タグの絞り込みを解除

templateとc++に関するMonMonMonのブックマーク (3)

  • 最高速のfizzbuzzを実装する話

    この前、Twitterで誰かが「コンパイラ言語でFizzbuzz書くなら、コンパイル時に全ての演算を済ませ、実行コストはI/O命令1個になるように最適化しないと」という話をしていた。いいこと言うな、と思ってスルーしていたのだが、体調不良で頭だけ動いている状態だったのでC++11でトライしてみることに。 案ずるより産むが易しというもので、割と簡単に綺麗に書けた。こんな感じ。 char配列を可変長のテンプレート引数として結合していって、文字列定数を生成するというテクニックは実際に使い所があるかもと思った。最近C++書いてないけど。 #include <cstdio> template <typename LHS, int N> struct numstr { template <char... Args> struct append { typedef typename numstr<LHS,

  • C++ でビットフィールドを再発明する | tech - 氾濫原

    ビットフィールドとは C/C++にはほとんど使われてないがビットフィールドという機能がある。 union { uint8_t raw; struct { unsigned FAULT_QUEUE : 2; unsigned CT_PIN_POLARITY : 1; unsigned INT_PIN_POLARITY : 1; unsigned INT_CT_MODE : 1; unsigned OPERATION_MODE : 2; unsigned RESOLUTION : 1; }; } config; このように書ける。struct 内で名前の後ろについているのが、そのフィールドで消費するビット数で、この場合合計で8bitになり、それを uint8_t と共用している。 こうすると config.OPERATION_MODE = 2; などと、マスクやシフトを伴わずに直接書けて、結果

  • Variadic templates in C++ - Eli Bendersky's website

    Prior to C++11, the only way to write functions that take an arbitrary number of arguments was to use variadic functions like printf, with the ellipsis syntax (...) and the accompanying va_ family of macros. If you've ever written code using this approach you know how cumbersome it is. In addition to being type unsafe (all type resolution has to be done explicitly with casts in va_arg, at runtime)

  • 1