Rokiのチラ裏

学生による学習のログ

2016-09-01から1ヶ月間の記事一覧

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

Xcode8.0 deprecatedのEndless stream of warnings

Xcode8.0にアップデートしてからGCC6.1.0でコンパイルを行うと、どうも下記のような警告文が大量に出力されるようになった。 warning: section "__textcoal_nt" is deprecated .section __TEXT, __textcoal_nt, coalesced, pure_instructions ^ ~~~~~~~~~~~~…

Learning Rust #2

続き。 メゾット構文 統一関数呼び出し*1のような記法を言うのかと思いきや、単にメンバ関数を呼ぶ動作とあまり変わらないような気がする。 struct X{ x:u32,y:u32 } impl X{ fn multiple(&self)->u32{self.x*self.y} fn create(&self,a:u32,b:u32)->X{X{x:a…

Learning Rust #1

The Rust Programming Languageを順番に読みながら学んでいくログをこちらにまとめてみる事とした。尚、シンタックス、セマンティックスの捉え方において、同様な意味合いとしていくつかC++コードを例題として挙げるかもしれない。その辺りは予めご了承くだ…

テンプレートプレディケートを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を返すだけのテンプレートである。しかしこれによって、テンプレートパラメータに対して、ある特定のタイプへの有効/非有効的な一式を…

式によるSFINAE

C++

C++11時代からある話題だが...。置き換え失敗はエラーにあらずで有名なSFINAEを、式によってコントロールする手法。 例えば、二つの引数を差し込む事のできる関数を定義するとする。しかし、渡したいのはイテレータか生ポインタのみであり、それ以外の値を受…

Duktapeを使ってC++コードとECMAscriptをブリッジさせる

導入 % wget http://duktape.org/duktape-1.5.1.tar.xz % tar xvfJ duktape-1.5.1.tar.xz % make -f Makefile.cmdline % ./duk -e "print('Hello duk')" Hello duk 機能テスト Ecmascriptのアルゴリズムや機能をDuktapeで利用する事ができる。 % ./duk test_…

Rangeアルゴリズム関数に対するReverseアダプタ

C++

boost.range。 #include<boost/range/algorithm.hpp> #include<numeric> #include<vector> int main() { std::vector<int> v(10); std::iota(std::rbegin(v),std::rend(v),0); boost::sort(v); } STLが各要素に重きを置いた設計であるのに対して、Boost.rangeは、rangeを1単位として考え重きを置いた設計である</int></vector></numeric></boost/range/algorithm.hpp>…

Quoted Strings Library Proposal

C++

知らなかったので自分用メモ。 #include<sstream> #include<string> #include<iomanip> #include<cassert> int main() { using namespace std::string_literals; std::stringstream ss; std::string original="foolish me"; { std::string round_trip; ss<<std::quoted(original); ss>>std::quoted(round_trip); assert(orig</std::quoted(original);></cassert></iomanip></string></sstream>…

STL Tutorial and Reference Guide,Second Edition C++ Programming with the Standard Template Library #3

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

しょぼいノートへBasix Linuxを入れる

※このエントリは、ただの日記です。 とある繋がりで、Dell Vostro 1540を、もう古くて使い物にならないとの事だったので、無償で頂いた。Celeron P4600、RAM 1GB、Windows 7というようなものだ。 まず、デフォルトでAeroが作動していたので切った。これだけ…