2012-01-01から1年間の記事一覧
中3女子です。 このエントリは C++ Advent Calendar 2012 の 7 日目の記事です。 概要 この記事では Sprout C++ Library という拙作のライブラリによって、以下のようなプログラムを作成する。 コンパイル時音声処理ライブラリ Sprout.Compost の紹介 コン…
バトル枠 Turisas - Battle Metal (Battle Metal 収録) 聞け! 我が戦士たちよ! 全世界の果てから来た戦士達よ!我らの軍に加わろう 軍を組織するのだ四つの風が我らを導き チュリサスの心が我らを先導する! Rhapsody - Warrior Of Ice (Legendary Tales …
本棚を少し整理した折りにふと思いついたので、個人的ライトノベル傑作選をリストにしました。 どれも完成度と面白さで文句無しなので、友達に推薦しても喜ばれること請け合いです。 ついでに内容を一行に纏めたので、未読の人は参考に、この機会に手に取っ…
前回(メタ関数の実装技法 - その1 - ボレロ村上 - ENiyGmaA Code)に続き、メタ関数の実装技法その2です。 関数の呼び分けと decltype を利用したメタ関数 たとえば、クラスメンバに型名 value_type を持つか判定するトレイトを考える。 has_value_type t…
そもそもメタ関数とは (参照:More C++ Idioms/メタ関数(Metafunction) - Wikibooks) 一般に C++ でメタ関数とは、与えられたテンプレート引数から、結果として何か型やコンパイル時定数を返す(定義する)ようなクラステンプレートをいう。 代表的な例と…
Sprout C++ Library Github https://github.com/bolero-MURAKAMI/Sprout ご存じのように Sprout には constexpr アルゴリズムがある。 ここでは、そのうち generate と unfold, および recurrence について解説する。 というのも、最近これらについてかなり…
constexpr の間違った使い方。 - C++でゲームプログラミング この記事へのフォローです。 constexpr static データメンバの場合は、"コンパイル時定数である変数は、宣言と同時に初期化しなければならない" という原則にしたがって、 クラススコープの内側に…
「constexpr を使うべき5の理由」の連載をひとまず終えたので、記事の一覧をここにまとめておきます。 また、その他の資料や情報へのリンクを載せておきますので、更に興味あるという方は読んでみるのもよいでしょう。 constexpr を使うべき5の理由 1.定数を…
「constexpr を使うべき5の理由」ひとまず最終回です。 コンパイル時に計算ができると聞いて、誰もがまず思い浮かべる用途は、おそらく、実行時に必要となる値をあらかじめ計算しておくというものでしょう。 5.必要なものをなるべく早く用意しておくために …
「constexpr を使うべき5の理由」ようやく4つめです。 今回は、いわゆるメタプログラミングにおける constexpr について取り上げます。 4.あのうんざりするテンプレートメタプログラミングによる数値計算からはもはや解放された 以下のコードは、[1 .. 5] の…
相変わらず「constexpr を使うべき5の理由」です。 今回は、関数に対する constexpr 指定のもう一つの意味について取り上げます。 3.副作用がないことを保証する 「ねむらなくてもつかれないくすり」に副作用はあるのでしょうか。疲労をポンと感じなくさせて…
constexpr を使うべき5の理由 「なぜあなたは constexpr を使うべきか?」 「そもそも constexpr とは何か」という基本的な部分から始めて、 どうして C++er が constexpr を使わなければならないか、日にちを分けて5つのケースを書いてみます。 constexpr …
引き続き、「constexpr を使うべき5の理由」です。 ここでは、できるかぎり関数に constexpr を付けることが如何に C++er の義務であるかを示します。 2.定数を返す関数をコンパイル時定数にする #include <limits> constexpr auto v = std::numeric_limits<double>::max(); </double></limits>…
コンパイル時離散フーリエ変換(DFT) Sprout.Numeric.DFT は、constexpr DFT アルゴリズムを提供します。 https://github.com/bolero-MURAKAMI/Sprout/tree/master/sprout/numeric/dft DFT は周波数解析などに用いられますが、ここでは詳しくは述べません。 …
Github - Sprout https://github.com/bolero-MURAKAMI/Sprout Sprout.Io は、コンパイル時に文字列をソース/シンクとした入出力を行うことを目指すライブラリです。 基本的に iostream ライクな記法です。 Sprout.Io で文字列へ変換する #include <iostream> #include <sprout/io.hpp></sprout/io.hpp></iostream>…
§5.19 Constant expressions (N3290 より抜粋) 2 A conditional-expression is a core constant expression unless it involves one of the following as a potentially evaluated subexpression (3.2), but subexpressions of logical AND (5.14), logical …
この記事で取り上げた問題について。 小ネタ - constexpr の文脈でconstメンバ関数と非constメンバ関数を呼び分ける - ボレロ村上 - ENiyGmaA Code 簡単に言えば constexpr 関数では、 引数が rvalue reference の場合、constメンバ関数が呼ばれてほしいわけ…
コードをコミットしたのはだいぶ以前だけど言及していなかったので書きます。 Github - Sprout/sprout/index_tuple https://github.com/bolero-MURAKAMI/Sprout/tree/master/sprout/index_tuple index_tuple Idiom そのものについては、ググればそれっぽい情…
ちょっと嵌っていたのでメモがてら。 次のような get() メンバ関数を持つクラスと get() フリー関数があったとする。 template<typename T> struct X { T t; T& get() { /* 非const版 */ return t; } constexpr T const& get() const { /* const版 */ return t; } }; tem</typename>…
Sprout C++ Library Github https://github.com/bolero-MURAKAMI/Sprout Sprout に大幅な破壊的変更が入りました。 ユーザコードにおいて、コンテナのトレイト関連を使用したコードは、新しいものに書き換えする必要があります。 また、ユーザ定義のコンテナ…