2014-01-01から1年間の記事一覧
この記事はC++ AdventCalendar2014 6日目の記事になります 祝C++14!!祝C++14!!祝C++14!!祝C++14!!C++14においてconstexprの大幅な規制緩和が制定された これによりconstexprにおいてforなどループ文の記述が可能になった 一方そのころTMPは 残念ながらテンプ…
デジゲー博で頒布したゲームにいくつか不具合が見つかりました 申し訳ありませんお手数ですが以下のファイルの中身をすべてゲームのフォルダにコピーしてください。同じ名前のものは置き換えてください。 https://www.dropbox.com/sh/p7foxjuvncedu8p/AAAi6b…
ゲームが出来たてほやほやなので取り急ぎ告知と宣伝 自爆しちゃう系STG「はるはあけぼの、我は弾丸」を頒布します C-02a です ■おはなし およそ50年ほど前、地球温暖化対策として植林したバイオ植物が思いのほか育ちすぎてしまいました 元気な植物たちは盛ん…
本の虫: 2014-10-pre-Urbanaのレビュー: N4142-N4149 曰く重複した型を取り除くuniqueify が追加されるかもらしい そこで実装の話俺俺ライブラリOTMPよりuniqueuniqueはタイプリストを受け取り重複した型を取り除き返す unique_t<List<char,int,long,int>>;//List<char,int,long> この処理は「二つの</char,int,long></list<char,int,long,int>…
受け取ったタイプリストに対し適当な数字を被らないように返すLocalTypeHashメタ関数を作りたい using TypeHash=makeTypeHash<List<char,int void>>; TypeHash::apply<char>//0 TypeHash::apply<int>//1 TypeHash::apply<void>//2こんな感じしかして型が被った場合どうなるだろうこの場合このまま</void></int></char></list<char,int>…
タイトルで話が完結している namespace minibug { template<class ...T> struct List{}; template<class...T> std::true_type length_impl(List<T...>); template<class T> struct wrap{ using type = T; }; template<class T> using identity = typename wrap<T>::type; template<class list> using length = identity</class></t></class></class></t...></class...t></class>
自分が遭遇した最悪なバグを書いておこうと思う 型破壊バグ std::cout << typeid(BreakType).name();//struct ??::??と出力される //error C2133:サイズが不明です //error C2512:コンストラクタがない BreakType c; 上記のように壊れた型が発生する初代ポケ…
apply<sprout::types::quote<F>, Args...>::type は F<Args...>::type を返す— 狂える中3女子ボレロ村上/陶芸C++er (@bolero_MURAKAMI) 2014, 8月 18 apply<sprout::types::self<F>, Args...>::type は F<Args...> を返す— 狂える中3女子ボレロ村上/陶芸C++er (@bolero_MURAKAMI) 2014, 8月 18 これらの動作は Boost.MPL で</args...></sprout::types::self<f></args...></sprout::types::quote<f>…
この話で出てくる「アルゴリズム」「脱アルゴリズム」という単語について ここでいうアルゴリズムとは命令型言語的なアルゴリズムを指している なので必要に応じて「アルゴリズム」という単語を「(命令型言語的)アルゴリズム」と脳内正規表現マッシーンっで…
ネタではなく非常に強力であり実用的なソートである //コード bitonic_sort.hpp //実行結果 [Wandbox]三へ( へ՞ਊ ՞)へ ハッハッちなみに一部コードは C++11 constexprでマージソート - ここは匣 から借りてきた バイトニックソートとはマージソートの亜種であり…
解説 c == pow(2,k) == (1<<k)n + c*((n/c) mod 2 ? -1:1) → n + c*((n/(1<<k)) mod 2 ? -1:1) → n + c*((n>>k)mod 2?-1:1) → n + c*([nのk番bitが立っているか]?-1:1) → [nのk番が立っているか] ? n-c :n+c → [nのk番が立っているか]? [nのk番を折る] :[nのk番を立てる] → n^c</k)n>
こんな感じ struct Func { constexpr int operator()(int i)const { return i+1; } }; make_recurrence_list(0,Func{});//0,1,2,3,4... 無限だから長さを求めようとすると無限ループ起こしてコンパイラが死ぬ 単方向リストだから巻き戻しもできない かいてて…
タイトルの通りである ドワンゴC++勉強会 #1 - connpass constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。CPUの嬌声が聞こえてきそうだ *1 発表者:ボレロ村上氏 資料:http://www.slideshare.net/GenyaMurakami/onstexprcpu*2 内容は(…
ldionne/mpl11 · GitHub自分の大雑把な理解。間違ってたら指摘してもらいたいmpl11は基本的に遅延評価である。ゆえに極力計算しないBoxed typesとは多くのメタ関数やtype_wrap などT::typeとできる型のことであるmpl11のメタ関数は基本的にboxed typeを引数…
私には昔から、GOFのデザインパターンというものを学習したときからどうにも『そり』が合わないデザインパターンがあった visitorパターンである別に理解できなかったわけではない。使えないわけでもない。実際何度か使う場面もあった だが、思いだすたび、…
variant test variant C++11仕様だから20個以上の要素が詰め込めるよ!!COOLCATって感じだ コンストラクタとデストラクタ、あとapplyだけ実装してある 以下にget関数の簡易な実装を示す template<class T> struct Get { T operator()(const T&x)const { return x; } </class>…
グィスト constexpr binary fold実際に(静的に)実行したものはこちら wandbox [Wandbox]三へ( へ՞ਊ ՞)へ ハッハッ二分木foldとは文字通り二分木で畳み込み関数である binary_fold(plus{},1,2,3,4,5)は以下のように解決される ((1 + 2) + (3 + (4 + 5))) foldlやf…
ギッハッハブ Fuyutsubaki/tupleple · GitHubタプルプルプルタプルプル ご意見もらえると喜びますできること一覧 at N番目の要素にアクセスする apply タプルに関数を適用する view おおむね元要素へのアクセスのインデックスを架け替えてるだけである 基本…
マクロは邪悪であり害悪である 故にマクロは滅びなければならない 滅ぼさなければならない。存在してはならない。これは人間の義務である頭の中でワンワンと神が嘶くのでマクロフリーなテストライブラリもどきを作っていたgist マクロ無しの健全なテストライ…
再帰深度を抑えたtuple的コンテナの構築 - ここは匣 コレの最後の部分を逆に動かしたら指定された方だけに対応するhash関数が作れるのではとか考えてみたVSとClangでは動いたというのに。2対1だけど規格的にどっちが正しいのかわからない 間違ってる気さえ…
(追記)こっちも読め。こっちのがいい 再帰深度を抑えたtuple的コンテナの構築 - ここは匣 (追記終わり)調査環境はVS2013のみ たぶんO(log N)で動く コード中のstd::tupleはtype_listの代わりに使った。std::tupleを入れると実は対数オーダーにならないんじゃ…
https://gist.github.com/Fuyutsubaki/e798e6c8d9265d020b4d これ template<size_t N ,class Func> class drop_functor { template<class F> drop_functor(F&&f); template<class...T> auto operator()(T&&...args); }; template<size_t N,class Func> auto make_drop(Func&&func) ->drop_functor<N, Func>; N個dropして関数を適用して</n,></size_t></class...t></class></size_t>…
夜 (fimbul11) on Twitter さんの Template Meta Programming入門から応用までの367ページ当たり見ながら書いた 深度O(logN)で動くvalue_at的な関数http://melpon.org/wandbox/permlink/i0YgUwd8wdsJBDJE gccとClangで動作確認。VSではstd::index_sequenceが…
一時オブジェクトとはこれである x+y; Type(); 要するに変数に関連付けられていないオブジェクトのことであるこいつ等の寿命は式が終わるまで、つまりセミコロンが出てくるまでである void f(const std::string&s); //main //fを処理する段階ではまだ生きて…
template<class> struct rhs { friend int operator*(int x, rhs){ return 2; } }; template<class T> rhs<T> make(T){ return rhs<T>(); } using R = decltype(42 * make(42)); int main(){} 自身が右辺に来る二項演算子を クラス内でオーバーロードした テンプレートクラスを テ</t></t></class></class>…
本日2014年 2011年から早3年。C++11も浸透してきた、してきてる、してきて欲しいなという時分ですね 冬椿です。ファミレスに行ったらカレーがメニューから消えてました。こんばんはC++11で追加された機能の一つに『右辺値参照』というものがあります こいつ…
某社に面接に行ってきました。 で、そこで「reverse関数書いて(意訳)」と言われたので書いてきた void reverse(std::string& str) { size_t N = str.size(); for (size_t i = 0; i < N/2; ++i) std::swap(str[i], str[N - 1 - i]); } こんなの。CodeIQなら★…
VisuakStudio2013のバグ?エイリアステンプレートにエイリアステンプレートを使うとC2955エラーを吐く - TXT.TXTの問題をちゃんと分析しなおした テストコードはーい template<size_t N> struct Index{ static const size_t value = N; }; template<class T> using foo = typena</class></size_t>…
なんかむらむらする。プログラムを書くっていう日じゃない のでちょっと自作ライブラリtupleple::type_list::mapについて書きたいまず何がやりたいか、サンプルを書く using tuple=std::tuple<void,int,char>; using result=map<std::add_pointer,tuple>::type; static_assert(std::is_same<result,std::tuple<void*,int*,char*>>::value,</result,std::tuple<void*,int*,char*></std::add_pointer,tuple></void,int,char>…
現在私はtuplepleという、boost.fusionのC++11版になりたいタプル操作ライブラリを作っている 作り始めた理由はちょっと込み入ったことをしようと思うと必ずタプル操作が必要になったからだで、製作途中でindex_tuple_idiomというのを思いついた 厳密に言う…