タグ

constexprに関するgim_kondoのブックマーク (3)

  • constexpr アルゴリズムの実装イディオム その1 - ボレロ村上 - ENiyGmaA Code

    中3女子です。 今回は、constexpr におけるアルゴリズムの実装法について考える。 よく知られているように、constexpr 関数には言語規格上の制約が多くある。 ローカル変数が使えない、if や for などの制御構文が使えないなどは、C++11 に触れた者なら誰でも知っているだろう。 だが、それらは条件演算子や再帰によって、単純に代替できる問題である。 つまり、非 constexpr な実装に対して、処理の流れを質的に変えることなく constexpr に書き換えることができる。 単純に書き換えられる例: template<typename T> T const& runtime_min(T const& a, T const& b) { if (b < a) return b; return a; } template<typename T> constexpr T con

    constexpr アルゴリズムの実装イディオム その1 - ボレロ村上 - ENiyGmaA Code
  • Sprout.String - constexpr 文字列クラス - ボレロ村上 - ENiyGmaA Code

    Sprout.String - constexpr 文字列クラス sprout/string.hpp Github https://github.com/bolero-MURAKAMI/Sprout/blob/master/sprout/string.hpp Sprout.String は、constexpr で使える(固定長)文字列クラスを提供します。 モチベーション constexpr の規格化によって、コンパイル時の文字列処理・解析といったことが実現可能になりましたが、 文字列をリテラルのまま使い回すのはかなり厳しいし、アルゴリズムにも適用しづらい。 そういった場合、constexpr で使える文字列クラスがあれば便利だろう、ということでつくりました。 #include <sprout/string.hpp> ヘッダは sprout/string.hpp です。 リテラルからの変換

    Sprout.String - constexpr 文字列クラス - ボレロ村上 - ENiyGmaA Code
  • constexpr レイトレーシング - ボレロ村上 - ENiyGmaA Code

    これは、Sprout.Darkroom ライブラリの constexpr レイトレーサーでレンダリングした画像です。 画像サイズは 512×512 pixel。 もちろん画素データはすべてコンパイル時に生成され、ファイル出力のみが実行時に行なわれています。 光源は手前右側にあり、手前の青色がかった球から奥の赤色がかった球へ落ちる影や、 反射による球形の映り込みも確認できると思います。 レイトレーシングの基的なアルゴリズムはとてもシンプルです。 視点から各ピクセルを通る光線を飛ばして、ベクトルが オブジェクトと交差する部分の拡散光と反射光の成分を得るだけです。 さて、ではこの Sprout.Darkroom が constexpr でどう実装されているか見てゆくことにしましょう。 とても明快で解りやすい実装です。 なお Sprout.Darkroom は未だ開発途上のライブラリであり、扱え

    constexpr レイトレーシング - ボレロ村上 - ENiyGmaA Code
  • 1