C++と色々

主にC++やプログラムに関する記事を投稿します。

boost

Boost.HOFについて

Boost 1.67.0から Boost.HOF というライブラリが追加されました。 HOFはHigher Order Functions(高階関数)の略で、関数や関数オブジェクトのユーティリティを提供するライブラリです。 ヘッダーオンリーでC++11以上の環境で使えます。 3つのコンポーネントが…

「Boost.勉強会 #19 東京」に参加しました

2015/12/05に行われたBoost.勉強会 #19 東京に参加してきました。 connpass.com 朝10時からと、起きられるか大変不安でしたが、無事起きられて安堵しました。 会場としてなったIIJさんからお水を頂きました。ありがとうございます。 最初に@cpp_akiraさんか…

boost::fusion::vectorで異なる型のコンテナ

動的な多態性を持った型のオブジェクトをコンテナで扱いたい場合、基本クラスの参照型または基本クラスのポインタ型のコンテナを使うことができます: #include <iostream> #include <memory> #include <vector> struct A { void disp() const { do_disp(); } private: virtual void do_</vector></memory></iostream>…

<boost/detail/lightweight_test.hpp>

概要 ちょっとしたテストが書きたい、でもちゃんとしたテスティングフレームワークを導入するのは重い…そんな時にboostのlightweight_testが便利です。 これはboost/detail/lightweight_test.hppにあります。detailディレクトリ以下なのでちょっと分かりにく…

boost::serializationでboost::shared_ptrをシリアライズする

boost::shared_ptrをシリアライズする際にハマったのでメモしておきます。 boost::shared_ptrのトラッキングレベルはboost::shared_ptrの型Tのトラッキングレベルに依存しています。そして、その型Tのトラッキングレベルはboost::serialization::track_never…

boost::serializationでデフォルトコンストラクタのないクラスをシリアライズ化する

デフォルトコンストラクタを持たないクラスをシリアライズする。 save_construct_dataを使う、とかいった情報は出てくるのに、肝心のアーカイブ化するサンプルコードが探した限りあんまり無いので、サンプル張っておきます。ここに知りたいことが書いてあり…

MinGWでboostをビルドするとコンパイルエラーになる

MinGWのgccでboostを使いたかったので、こちらのサイトを参考に bootstrap.bat gcc を実行しました。すると Building Boost.Build engine builtins.c: In function 'builtin_readlink': builtins.c:1879:39: error: 'FSCTL_GET_REPARSE_POINT' undeclared (f…

Boost.Asioで簡単なチャット

簡単なチャットプログラムを書いてみました。Boost.AsioとWinsock2の2通り書いてみました。とにかく簡単に書こうとしたので、TCPで、同期通信しています。なので、一方的にメッセージを送ることはできず、必ずサーバ側とクライアント側が交互にメッセージを…

Boost.AsioでHTTP通信

HTTP通信をするプログラムを書いてみました。WinScok2とBoost.Asioでそれぞれ書いてみました。簡単にするためにTCPで同期通信するプログラムです。WinSockの参考に「猫でもわかるWindowsプログラミング」を使ったのでアクセスするページがそうなっていますが…

cpp_dec_floatをcpp_intに変換する方法

boost::multiprecision::cpp_dec_float(以下cpp_dec_float)からboost::multiprecision::cpp_int(以下cpp_int)へ直接変換する方法はありません。同様にcpp_intからcpp_dec_floatへ直接変換する方法はありません。*1 cpp_intもcpp_dec_floatも、文字列へ変換す…

BOOST_PP_ITERATE

以前の記事でBOOST_PP_REPEATについて書きました。 BOOST_PP_REPEATは似たような記述を繰り返す際に利用できます。例えば、以下の様です(このコード自体に意味はありませんが…) #include <boost/preprocessor/cat.hpp> #include <boost/preprocessor/repeat.hpp> #define VALUE(z, n, d) const int BOOST_PP_CAT(VALUE_, </boost/preprocessor/repeat.hpp></boost/preprocessor/cat.hpp>…

boost::any

boost::anyは動的型とも言われています。まるで動的型付け言語のようにboost::anyにはあらゆる型のオブジェクトを代入し、取り出すことができます。boost::anyに格納することが出来る型の要件は以下の3つです。 コピーコンストラクト可能なこと 例外に対して…

BOOST_PP_REPEAT

BOOST_PP_REPEATは引数に渡されたマクロを指定回数分展開するマクロです。 書式は以下のようになります。 BOOST_PP_REPEAT(c, m, d) cは、何回引数に渡されたマクロを展開するかの回数を指定します。 例えば5を入れれば指定されたマクロは5回展開されます。 …

boost::program_options

boost::program_options名前空間にあるクラスを用いると、コマンドライン引数(オプション)を柔軟に簡単に解析できます。自作アプリケーションでオプションをつけるのならば使わない手はないです。 具体的には、渡されたコマンドライン引数をコマンド毎に(…

boost::in_place

boost::in_placeを使うと確保したメモリにオブジェクトを後から構築できるようになります。 copy不可なオブジェクトも再構築で再代入のような振る舞いをさせられます。trivial destructorをもつクラスはデストラクトせずに再構築できます。 #include <iostream> #inclu</iostream>…

boost::assign

コンテナを初期化や代入する際、push_back等を並べる必要がなく、簡単に書けるようになります。 イテレータ初期化に対応しているクラスなら使えます。サンプル #include <boost/assign.hpp> #include <vector> #include <list> #include <map> #include <string> using namespace std; int main() { using </string></map></list></vector></boost/assign.hpp>…

boost::signals2

C++のためのAPIデザイン読んでいて初めて知ったのでメモ。 複数の関数を入れられるstd::functionみたいなもの。 同じシグネチャの関数ポインタ・関数オブジェクトを複数登録して、まとめて呼び出すことができる。 呼び出す順序はデフォルトだと、登録した順…

boost::optional

夏休み中サボってしまった… マイペースで行こう() あ、自分のプログラムに関する理解が誤っているの気づいた方はコメントで突っ込んで頂けると嬉しいです…今回はboost::optionalを試してみよう boost::optionalは、T型に無効値を追加した型みたいなもの。C…

boost::lexical_cast

自分がboost全然知らないので勉強目的 かつ 身内への宣伝を兼ねて色々使ってみることにする。最初はboost::lexical_cast 使い方はとっても簡単で、C++式のキャストと同じ書き方で文字列→数値、数値→文字列の変換を行う。自作クラスでも型変換子だか、演算子…