C++
最近、totoという宝くじを買った。つい先ほど、「後二つ当たっていたら三等でした!」という残念メールが受信されたのだが、なんとなく悔しいので、取り敢えずtotoの公式サイトの過去のくじ結果から過去の試合結果やくじ結果などをcsv形式で吐き出させて、そ…
前書き この記事は、アドベントカレンダーだるい Advent Calendar 2016、18日の記事です。 怠さ蔓延るこの時期ですが、あまりにも怠いと怠いと声に出すのも怠いですね。出来れば、無言でトントンやるだけで怠さを伝えたいものです。無言でトントン...モール…
C++11の環境ではinteger sequenceが標準搭載されていないので、そういった場合への対処法としてメモ。以下のコードはclang 4.0.0の-std=c++11モードで確認している。 まず単純に再起して、パラメータパックがたまりきった所で呼び出す方法。 inline void foo…
題名は何だかやたら大々的だがそんな大した事はしていない。 あるところで、シリアル番号を生成したいという案件が来たというような話を伺った。まあ、ちょいちょいとやれば簡単に実装できるとの話だったので、「そうですね」と私は答えた。「そうですね」と…
前回書いていないようなメタ関数を書いてみたので一応。※追記 改善を施しライブラリ化した // First template<class...> struct First; template<class Head,class... Tail> struct First<Head,Tail...>{ typedef Head type; }; template<class Head,class... Tail> struct First<pack<Head,Tail...>>{ typedef Head type; }; template<class... Pack> using First_t=…</class...></pack<head,tail...></class></head,tail...></class></class...>
@530506 と思ったらバグ報告されていた。https://t.co/eq4rbFhuZy 淡白な回答だなあ。— roκi (@530506) 2016年12月12日 定義済みのconstexpr関数をop noexceptへ渡すと0が送出されているが、これは規格準拠の挙動ではない。 The result of the noexcept oper…
前書き この記事はC++ Advent Calender 2016、10日の記事です。 こんにちは。 12月10日はイディオムの日なので、この記事では比較的有名だと思われるC++イディオムを一通り巡ります(順不同)。しかしAdvent Calenderの流れを見るに、恐らくその多くが既知のも…
は必要あるだろうか。 boost.assignではoperator+=を使って連続的な挿入を実現しているがパイプライン記法に入れる事は出来ない。 template<class F,class Range> auto operator|(const Range& r,const F& f) { return f(r); } template<class Iterator> struct copied_t_impl{ explicit copied_t_</class></class>…
※追記このエントリーにおけるコードはその後改善が施され、それについての新たなエントリが書かれた(See also )。 variadic templateで遊ぶ - in neuroにインスパイアされて、私も少し遊ぶ事にした。折角なのでリンク先の内容とは異なるヘルパを作る。まず簡…
is_trivially_copyableはtriviallyコピーでなければコピー可能だとしても許容されない。トライバルでなくてもコピー可能な型を判定するメタ関数はそういえば見たことが無かったので、作ってみた。 template<class _Tp,_Tp&(_Tp::*)(const _Tp&)> struct copy_signature{ using type=_Tp; }; templ</class>…
ゲームプログラマになりたい人に対して基本的なアルゴリズムを考えさせるために、簡単なパズルゲームを作らせるのは良いのではないかと思われる。かと言って自分の作ったサンプルもないのはアレなので、一応GUI化して実装をしておく。 github.com ご覧の通り…
※ネタですツイッター等でPPAPを元ネタにしたネタコードをよく見るので、違う方向性で。ダックタイピングならぬ...。 #include<memory> #include<utility> #include<iostream> #include<string> #include<sstream> using namespace std::string_literals; const struct pen{ auto say()const{return "pen"s</sstream></string></iostream></utility></memory>…
以前同じようなものを書いたが、機能を若干単純にして、連続的な演算を想定していなかったのでexpression templateを用いて再度書き直した。論理的に以前のものよりこちらの方が高速である。 以下のように使う。 #include<srook/math/digits.hpp> #include<functional> int main() { using names</functional></srook/math/digits.hpp>…
私「ファイル入出力処理のサンプルにbrainfk interpreterを用いるのが良い」 A「なら書いてよ」 私「ググれば既出のものが色々出てくるよ。」 A「書けないの?」 私「...」 brainfkのhello world。 ./a.out hello.bf Hello, world! fizzbuzzの次に出す例題と…
このようなコードが貼り付けられていた。 struct X{constexpr X(){}}; class CC{ struct Y{ constexpr Y(){}; }; struct Z{ /*constexpr Z(){}*/ }; static constexpr X x={}; static constexpr Y y={}; static constexpr Z z={}; }; int main(){} これは、s…
を取り敢えず作っている。これからまだoperatorやその他機能(数値リテラルに対するアレコレなど)を付けるつもりだが一旦gitにコミットする。 使い方 このように桁毎に数値を分離してrangeにしたり、元の値に戻したり、range同士で加算が可能である。 #include<iostream></iostream>…
EBOの有効的な用いられ方としてコピー禁止を明快に表現する方法がある。 class noCopyable{ noCopyable(const noCopyable&)=delete; noCopyable& operator=(const noCopyable&)=delete; protected: noCopyable()=default; ~noCopyable()=default; }; struct …
CRTPによる静的インタフェースクラスによって派生クラスでの該当関数の実装を強要する。 template<class _Tp> struct base{ void f()const{static_cast<_Tp>(this)->f();} }; struct derived:private base<derived>{ void f()const{} }; int main() { derived().f(); } しかし、使わな</derived></_tp></class>…
帰ったらブログにでも書くよと言ってしまったので書く... 例題として、TypeErasureを利用した簡単なAnyを示す。こういったTypeErasureにはテンプレートコンストラクタを必要とするが該当部分でuniversal reference constructorを用いてPerfect Forwardingを…
標準化委員会による文書:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0052r2.pdf 通常RAIIを採用した場合、例外安全性とムーブコンストラクタ/代入演算子、リソース漏れなどに注意を払いながら確実に実装しなければならない。例えば、これは…
とても有名な、Type Erasureによるダックタイピング。 #include<memory> struct X{ template<class _Tp> X(_Tp&& x):ptr(new Erasure<_Tp>(std::forward<_Tp>(x))){} void quack()const{ptr->quack();} private: struct ErasureBase{ virtual ~ErasureBase()=default; virtual void quack(</_tp></_tp></class></memory>…
汎用オレオレライブラリ製作などに当たって標準コンテナに適応できるようiterator型に対する型特性を扱いたい時というのもまあまあ頻度としてある気がするので、既出ネタであるような気もするがC++03、11、14、1z毎のhas_iterator type traitsメタ関数の実装…
多分既出ネタのような気がする(確認していない)が自分用メモも兼ねてまとめて見る事にした。 cerealとはヘッダーオンリーでシリアライズ、デシリアライズが可能なC++ライブラリである。 cereal is a header-only C++11 serialization library. cereal takes …
以下のような単純なクラスがある。 template<class _Tp> struct X{ X(const _Tp& x=0):value(x){} bool eq(const _Tp& x){return x==value;} private: const _Tp value; }; これを使う場合に、例えばintとlongを型として当てはめた場合、クラス自体の互換性を持つように</class>…
一応まとめておく。 当然だが、インスタンス生成されていないテンプレート関数を推測するのは不可能である。そういった場合は、明示的にキャストをする。 #include<array> #include<boost/range/algorithm_ext/iota.hpp> #include<boost/range/algorithm/copy.hpp> #include<boost/range/algorithm/sort.hpp> #include<iostream> #include<functional> #include<experimental/iterator> template</experimental/iterator></functional></iostream></boost/range/algorithm/sort.hpp></boost/range/algorithm/copy.hpp></boost/range/algorithm_ext/iota.hpp></array>
前回から続く。このエントリーは以下の書籍を参照している。 STL―標準テンプレートライブラリによるC++プログラミング 第2版作者: ディビッド・R.マッサー,アトゥルサイニ,ギルマー・J.ダージ,David R. Musser,Atul Saini,Gillmer J. Derge,滝沢徹,牧野祐子…
こんな便利なものがあったとは...。 #include<boost/range/algorithm_ext/iota.hpp> #include<boost/range/algorithm/copy.hpp> #include<array> #include<experimental/iterator> #include<iostream> int main() { std::array<int,5> ar; boost::iota(ar,0); boost::copy(ar,std::experimental::make_ostream_joiner(std::cout,",")); // …</int,5></iostream></experimental/iterator></array></boost/range/algorithm/copy.hpp></boost/range/algorithm_ext/iota.hpp>
分からんと言われたので解説的なエントリ。まずC++には、テンプレート引数をrvalue referenceとして引数に設定しlvalueを渡すと、lvalue referenceになるという仕様がある*1。 #include<experimental/type_traits> #include<iostream> using namespace std::experimental; struct X{}; template<class _Tp> v</class></iostream></experimental/type_traits>…
make_elements_stringにiotaのような機能を加えてみた。まあ、あまり需要はないだろうけど。add new features · falgon/SrookCppLibraries@b55f52c · GitHub こういったようなコードを srook::make_elements_string(1,2,3,4,5,6,7,8,9,10,11,12,13...n); こ…
一年前ぐらいの話題であるが...。void_tというクラステンプレートがある。これは、何をどれだけ渡そうが全て無視してvoidを返すだけのテンプレートである。しかしこれによって、テンプレートパラメータに対して、ある特定のタイプへの有効/非有効的な一式を…