Rokiのチラ裏

学生による学習のログ

C++

totoの公式サイトから試合データとかをスクレイピングしてアレコレ

最近、totoという宝くじを買った。つい先ほど、「後二つ当たっていたら三等でした!」という残念メールが受信されたのだが、なんとなく悔しいので、取り敢えずtotoの公式サイトの過去のくじ結果から過去の試合結果やくじ結果などをcsv形式で吐き出させて、そ…

アドベントカレンダーだるい

C++

前書き この記事は、アドベントカレンダーだるい Advent Calendar 2016、18日の記事です。 怠さ蔓延るこの時期ですが、あまりにも怠いと怠いと声に出すのも怠いですね。出来れば、無言でトントンやるだけで怠さを伝えたいものです。無言でトントン...モール…

C++11でタプルを関数の引数へ渡す

C++

C++11の環境ではinteger sequenceが標準搭載されていないので、そういった場合への対処法としてメモ。以下のコードはclang 4.0.0の-std=c++11モードで確認している。 まず単純に再起して、パラメータパックがたまりきった所で呼び出す方法。 inline void foo…

cereal + boost json_parserによるjsonファイル入出力の一例

C++

題名は何だかやたら大々的だがそんな大した事はしていない。 あるところで、シリアル番号を生成したいという案件が来たというような話を伺った。まあ、ちょいちょいとやれば簡単に実装できるとの話だったので、「そうですね」と私は答えた。「そうですね」と…

Variadic templateへのあらゆる操作その2

C++

前回書いていないようなメタ関数を書いてみたので一応。※追記 改善を施しライブラリ化した // 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...>

clangでのnoexcept、式が定数式の場合でも0を送出する事がある

@530506 と思ったらバグ報告されていた。https://t.co/eq4rbFhuZy 淡白な回答だなあ。— roκi (@530506) 2016年12月12日 定義済みのconstexpr関数をop noexceptへ渡すと0が送出されているが、これは規格準拠の挙動ではない。 The result of the noexcept oper…

比較的有名だと思われるC++イディオムを巡る

C++

前書き この記事はC++ Advent Calender 2016、10日の記事です。 こんにちは。 12月10日はイディオムの日なので、この記事では比較的有名だと思われるC++イディオムを一通り巡ります(順不同)。しかしAdvent Calenderの流れを見るに、恐らくその多くが既知のも…

パイプライン記法での連続的な挿入操作

C++

は必要あるだろうか。 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>…

Variadic templateへのあらゆる操作

C++

※追記このエントリーにおけるコードはその後改善が施され、それについての新たなエントリが書かれた(See also )。 variadic templateで遊ぶ - in neuroにインスパイアされて、私も少し遊ぶ事にした。折角なのでリンク先の内容とは異なるヘルパを作る。まず簡…

型がTrivially CopyableだけではなくCopyableであるかを判定するメタ関数

C++

is_trivially_copyableはtriviallyコピーでなければコピー可能だとしても許容されない。トライバルでなくてもコピー可能な型を判定するメタ関数はそういえば見たことが無かったので、作ってみた。 template<class _Tp,_Tp&(_Tp::*)(const _Tp&)> struct copy_signature{ using type=_Tp; }; templ</class>…

簡単なパズルゲーム

ゲームプログラマになりたい人に対して基本的なアルゴリズムを考えさせるために、簡単なパズルゲームを作らせるのは良いのではないかと思われる。かと言って自分の作ったサンプルもないのはアレなので、一応GUI化して実装をしておく。 github.com ご覧の通り…

PPAPタイピング

※ネタですツイッター等で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>…

桁毎の処理に特化したコンテナ的なもの2

C++

以前同じようなものを書いたが、機能を若干単純にして、連続的な演算を想定していなかったのでexpression templateを用いて再度書き直した。論理的に以前のものよりこちらの方が高速である。 以下のように使う。 #include<srook/math/digits.hpp> #include<functional> int main() { using names</functional></srook/math/digits.hpp>…

サンプルコードにbrainfk interpreter

C++

私「ファイル入出力処理のサンプルにbrainfk interpreterを用いるのが良い」 A「なら書いてよ」 私「ググれば既出のものが色々出てくるよ。」 A「書けないの?」 私「...」 brainfkのhello world。 ./a.out hello.bf Hello, world! fizzbuzzの次に出す例題と…

implicit constructorか否か

C++

このようなコードが貼り付けられていた。 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…

桁毎の処理に特化したコンテナ的なもの

C++

を取り敢えず作っている。これからまだoperatorやその他機能(数値リテラルに対するアレコレなど)を付けるつもりだが一旦gitにコミットする。 使い方 このように桁毎に数値を分離してrangeにしたり、元の値に戻したり、range同士で加算が可能である。 #include<iostream></iostream>…

多重継承でのEBO最適化

C++

EBOの有効的な用いられ方としてコピー禁止を明快に表現する方法がある。 class noCopyable{ noCopyable(const noCopyable&)=delete; noCopyable& operator=(const noCopyable&)=delete; protected: noCopyable()=default; ~noCopyable()=default; }; struct …

CRTPによる静的インターフェースクラスを用いた実装でインスタンス化せずにコンパイル時エラーを吐かせる

C++

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

const lvalue reference constructorとuniversal reference in constructorの共存における問題の解決法

C++

帰ったらブログにでも書くよと言ってしまったので書く... 例題として、TypeErasureを利用した簡単なAnyを示す。こういったTypeErasureにはテンプレートコンストラクタを必要とするが該当部分でuniversal reference constructorを用いてPerfect Forwardingを…

ジェネリックなRAIIラッパーunique_resource

C++

標準化委員会による文書:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0052r2.pdf 通常RAIIを採用した場合、例外安全性とムーブコンストラクタ/代入演算子、リソース漏れなどに注意を払いながら確実に実装しなければならない。例えば、これは…

Type Erasureにおける質問

C++

とても有名な、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>…

C++標準バージョン毎のhas_iterator 実装方法と解説

C++

汎用オレオレライブラリ製作などに当たって標準コンテナに適応できるようiterator型に対する型特性を扱いたい時というのもまあまあ頻度としてある気がするので、既出ネタであるような気もするがC++03、11、14、1z毎のhas_iterator type traitsメタ関数の実装…

cereal A C++11 library for serializationをParameterized Base Class Idiomで美味しく頂く

C++

多分既出ネタのような気がする(確認していない)が自分用メモも兼ねてまとめて見る事にした。 cerealとはヘッダーオンリーでシリアライズ、デシリアライズが可能なC++ライブラリである。 cereal is a header-only C++11 serialization library. cereal takes …

クラスの内部に持つデータ型の互換性からクラス自体に互換性を持たせる場合の良き書き方

C++

以下のような単純なクラスがある。 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>…

テンプレートプレディケートをCompareに渡す

C++

一応まとめておく。 当然だが、インスタンス生成されていないテンプレート関数を推測するのは不可能である。そういった場合は、明示的にキャストをする。 #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 Tutorial and Reference Guide,Second Edition C++ Programming with the Standard Template Library #4

前回から続く。このエントリーは以下の書籍を参照している。 STL―標準テンプレートライブラリによるC++プログラミング 第2版作者: ディビッド・R.マッサー,アトゥルサイニ,ギルマー・J.ダージ,David R. Musser,Atul Saini,Gillmer J. Derge,滝沢徹,牧野祐子…

ostream_joiner

C++

こんな便利なものがあったとは...。 #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>

std::forward

C++

分からんと言われたので解説的なエントリ。まず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

C++

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を用いたdetection idiom

C++

一年前ぐらいの話題であるが...。void_tというクラステンプレートがある。これは、何をどれだけ渡そうが全て無視してvoidを返すだけのテンプレートである。しかしこれによって、テンプレートパラメータに対して、ある特定のタイプへの有効/非有効的な一式を…