読者です 読者をやめる 読者になる 読者になる

それでも構造体をtupleに変換したい

C++

前 最近書いたマクロ(構造体をtupleに変換したい) - TXT.TXT これもC++ Advent Calendar 2016の9日目の記事です はじまり 構造化束縛なら? 実装 できないこと はじまり struct S { int x; std::string s; }; 構造体に bool operator<(S const&lhs,S const…

最近書いたマクロ(構造体をtupleに変換したい)

C++

これはC++ Advent Calendar 2016の9日目の記事です はじまり はじまり2 つまりこうなりたいという気持ちがあります 書いた コードの動き はじまり こんな感じのコードを書いていた struct try_focus { Player p; Card c; }; string to_json(try_play const &…

優先順位付オーバーロード関数オブジェクト

C++

事の起こり apply(a,b)( //a,bは多態型 [](int,int){} ,[](auto,int){} ,[](auto,auto){} ) みたいなことをやりたかった 優先順位付オーバーロード関数オブジェクト 関数が上からチェックされるオーバーロード関数オブジェクト [Wandbox]三へ( へ՞ਊ ՞)へ ハッハ…

constexpr variantの限界:自分版

C++

Variant 型安全Union 関数型風にいうと直和型 例えば Variant<int,double,string> であればint,double,stringの内どれかの値が入っている 複数の型のうちの一つを入れることができる型 variantはとても便利な機能だ。C++の標準にもこれと似たものを入れようという動きがある。そ</int,double,string>…

stateful constexpr Counter/CompiletimeTypeID

C++

stateful constexprとは?という問題についてはまずこの辺りを見ていただきたい C++のconstexprは参照透明とは限らない - 魂をC++に捧げよ 本の虫: constexprで非定数式の状態を保持このように書かれるたびに(≠呼び出されるたび)違う値を返すconstexpr関数を…

非constexpr文脈内でconstexpr関数をコンパイル時評価したような気分になる方法

C++

どうやら本日学生生活最終日らしいです。不思議 std::cout<

C++コードを投げるとアセンブラを投げ返すハイテックなオンラインサービス

C++

最近聞いたいい話 Compiler Explorer タイトルの通りC++のコードを打ち込むとアセンブラで返してくれるちなみにそのままC++11/14なコードを打ってもコンパイルエラーとなる コンパイラオプションは適当に[Wandbox]三へ( へ՞ਊ ՞)へ ハッハッとかから必要そうなと…

constexpr で テンプレートメタプログラミング

C++

この記事はC++ AdventCalendar2014 6日目の記事になります 祝C++14!!祝C++14!!祝C++14!!祝C++14!!C++14においてconstexprの大幅な規制緩和が制定された これによりconstexprにおいてforなどループ文の記述が可能になった 一方そのころTMPは 残念ながらテンプ…

標準ライブラリに重複した型を取り除くuniqueifyが入るかもしれないっていうからuniqueの実装について

C++

本の虫: 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>…

メタ関数の高階関数

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>…

c++11constexprでコンパイル時バイトニックソートを大雑把に実装した

C++

ネタではなく非常に強力であり実用的なソートである //コード bitonic_sort.hpp //実行結果 [Wandbox]三へ( へ՞ਊ ՞)へ ハッハッちなみに一部コードは C++11 constexprでマージソート - ここは匣 から借りてきた バイトニックソートとはマージソートの亜種であり…

constexprで無限リスト作った

C++

こんな感じ struct Func { constexpr int operator()(int i)const { return i+1; } }; make_recurrence_list(0,Func{});//0,1,2,3,4... 無限だから長さを求めようとすると無限ループ起こしてコンパイラが死ぬ 単方向リストだから巻き戻しもできない かいてて…

Boost.mpl11を読んだ

C++

ldionne/mpl11 · GitHub自分の大雑把な理解。間違ってたら指摘してもらいたいmpl11は基本的に遅延評価である。ゆえに極力計算しないBoxed typesとは多くのメタ関数やtype_wrap などT::typeとできる型のことであるmpl11のメタ関数は基本的にboxed typeを引数…

C++11なvariantを大雑把に実装した

C++

variant test variant C++11仕様だから20個以上の要素が詰め込めるよ!!COOLCATって感じだ コンストラクタとデストラクタ、あとapplyだけ実装してある 以下にget関数の簡易な実装を示す template<class T> struct Get { T operator()(const T&x)const { return x; } </class>…

tuple操作ライブラリ「tupleple」

C++

ギッハッハブ Fuyutsubaki/tupleple · GitHubタプルプルプルタプルプル ご意見もらえると喜びますできること一覧 at N番目の要素にアクセスする apply タプルに関数を適用する view おおむね元要素へのアクセスのインデックスを架け替えてるだけである 基本…

対数オーダー再起で構築されるtupleのギミックを大雑把に実装した

C++

(追記)こっちも読め。こっちのがいい 再帰深度を抑えたtuple的コンテナの構築 - ここは匣 (追記終わり)調査環境はVS2013のみ たぶんO(log N)で動く コード中のstd::tupleはtype_listの代わりに使った。std::tupleを入れると実は対数オーダーにならないんじゃ…

VSでも動くパラメーターパックヘルパーを作った

C++

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>…

対数オーダーでN番目の引数にアクセスするvalue_at的関数

C++

夜 (fimbul11) on Twitter さんの Template Meta Programming入門から応用までの367ページ当たり見ながら書いた 深度O(logN)で動くvalue_at的な関数http://melpon.org/wandbox/permlink/i0YgUwd8wdsJBDJE gccとClangで動作確認。VSではstd::index_sequenceが…

const 参照と右辺値参照と一時オブジェクトの寿命、あとforward_as_tupleとか

C++

一時オブジェクトとはこれである x+y; Type(); 要するに変数に関連付けられていないオブジェクトのことであるこいつ等の寿命は式が終わるまで、つまりセミコロンが出てくるまでである void f(const std::string&s); //main //fを処理する段階ではまだ生きて…

メイドでもよく分る右辺値参照

C++

本日2014年 2011年から早3年。C++11も浸透してきた、してきてる、してきて欲しいなという時分ですね 冬椿です。ファミレスに行ったらカレーがメニューから消えてました。こんばんはC++11で追加された機能の一つに『右辺値参照』というものがあります こいつ…

タイプリストに対するmapの実装とC++11のテンプレートメタプログラミング

C++

なんかむらむらする。プログラムを書くっていう日じゃない のでちょっと自作ライブラリ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>…

VS2013のバグ?クラス内非型テンプレートクラスをクラス内の宣言部で非型を使って展開するとできない。ってこう書いても何言ってるかわからんね

C++

なんかVSバグ?タグ作ったほうが良い気がした タイトルの通り #include<tuple> #include<type_traits> #include<iostream> struct C { template<size_t n> struct inner { using type = int; }; template<size_t ...N> static std::tuple<typename inner<N>::type...> f();//← template<size_t ...N> struct g { std::tuple<typename inner<N>::type...…</typename></size_t></typename></size_t></size_t></iostream></type_traits></tuple>

[function<R(Args...)>] → [function<R(tuple<Args...>)]する関数を書いてみた

C++

就活中。C++かけるところで働きたい。この際C++じゃなくてもいい。冬椿です [std::function<R(Args...)>] から [std::function<R(std::tuple<Args...>)]に変換する関数を書いたおよそ40行。短いことはいいことだ //サンプル int func(int a, int &b, int c) { std::cout << a << b << c; return</r(std::tuple<args...></r(args...)>…

【C++】poly_functionが作れなかったのでジェネリックラムダ2つを受け取りどちらかを返す関数型言語のif式っぽいのを作った

C++

前回(【C++雑記】半日ほどstd::functioinのジェネリック版について考えてたけどどう考えても難しい - TXT.TXT) のだとあんまりにもあんまりなので、ナンカもうそれっぽい事が出来ればいいやとIf関数を作ってみた https://gist.github.com/Fuyutsubaki/853670…

ゲームデバックとかで使えそうな実行時間と回数を計測するクラスを作った

C++

プログラミングあるある プログラムが遅いけど思い当たる節が多過ぎてどこがネックかわからないなのでこんな感じにに動くクラスを作ってみた template<class T> using debug_timer = typename DebugTimer::Timer<T>; int main() { std::vector<int> v = Make10000();//10000の</int></t></class>…

自由を求めて、戻り値と引数を設定できるFunctionalVisitor

C++

進捗どうですか進捗だめです冬椿です。現実逃避して自由度の高いVisitorパターンを作ってました ビジターパターンって void accept(Visitor&visotor) こんな感じ。自由度がない。戻り値戻せないし引数引けないし。籠のなかの小鳥のよーだ。ドレードレー 奴隷…

継承とstd::shared_ptr & unique_ptrとカスタムデリータ

C++

ふと、継承されたクラスとスマポのカスタムデリータについて気になったので調べてみた

C++11時代はタプル操作なのでtuple版for_eachとstd::hash<tuple>

C++

C++11時代はtuple操作がいろいろイケメンだと女の子にモテモテだと聞いて tupleって抽象化された構造体だよねー

C++用汎用構文解析器pneuma

C++

boost::spirit怖すぎとか言いながらずっと作ってた。spiritV3来るって噂もあるけど知りません ソース

コンストラクタをbindしたりとかで使うConstruct

C++

ふとstd::bindでコンストラクタをbind出来ないかと思いまして using namespace std::placeholders; struct X{ X(int x, std::string s){ } }; std::bind(X, 3, _1);//出来ない std::bind(X::X, 3, _1);//出来ない std::bind(static_cast<X(int x, std::string s)>(X), 3, _1);//できね</x(int>…

friend bool operator<(const X&lhs,const X&rhs)って構文をboost::operatorsを見て初めて知った

先日ふと 「std::tieがあるのでこれを使って9割自動比較演算子のオーバーロードを作ろう」とか考えまして、途中で「boost::operatorsでいいじゃん」と気が付きまして

帰ってきたC++でもprologの事実みたいなことをやりたい!

C++

github始めました。使い方がわかりません この間の可変長テンプレート版 見た目が前回よりかっこいい ソースはこちら→https://gist.github.com/Fuyutsubaki/6156874

prologの事実みたいなことをやりたいFact

C++

prolog知らない人のために説明 例えば (1,3,5),(2,4,6),(1,4,9) みたいなのがあったとして (1,?,?) と聞くと (3,5),(4,9) と返してくれる。そんなのが欲しかったんだ

boost::dynamic_bitsetでn-集合するNset_iterator

前回*1の続きというか n-集合ってのは集合Xの中からn個だけ取り出したものの集合のことでこれが正式名称でいいのかわからん。nCk集合とかそっちの方がよかったのかしら *1:boost::Multiprecisionでべき集合する PowerSet_iterator - TXT.TXT

boost::Multiprecisionでべき集合する PowerSet_iterator

先日諸用でべき集合*1が必要になったので色々考えてみた 普通に考えてべき集合って集合の集合だから set<set<T>> MakePowerSet(Iterator begin,Iterator end) とかやればいいんだけどべき集合って2^Xの表記通り要素数が2^[Xの要素数]になるからxが10個あるとそれだ</set<t>…