Boost Tour 1_58_0

Akira Takahashi
Akira TakahashiProgrammer en Preferred Networks, Inc.
Boostライブラリ一周の旅
Ver 1.54.0 ∼ 1.58.0
高橋 晶(Akira Takahashi)
faithandbrave@longgate.co.jp
2015/05/30 Boost.勉強会 #17 東京
はじめに
• Boostに興味はあるけど、触ったことがない
• バージョンアップについていけなくなった
• Boostの全容を知りたい
この発表は、以下のような方を対象にして、
Boost 1.58.0時点での、なるべく全てのライブラリの
概要を知ってもらうためのものです。
Boostとは
• 標準ライブラリに満足できなかった人たちが作っている、

C++の準標準ライブラリ。
• Boostから標準ライブラリに、多くの機能が採用されている
• 普段のプログラミング全般で使える基本的なものから、

専門的なものまで、いろいろなライブラリがある。
• ライセンスはBoost Software License 1.0
• 無償で商用利用可能
• 著作権表記の必要なし
• ソースコードの改変自由
本日紹介するライブラリ
• Log
• TTI
• Type Erasure
• Predef
• Align
• Type Index
• Endian
• Sort
質問は随時受け付けます
• この発表では、8ライブラリの紹介をします。
• 1ライブラリに付き、(ほぼ)ひとつのサンプルコードで

解説する、というスタイルです。
• 5∼10分ほど発表時間が余るようにしてあるので、
• 「ここがよくわからなかった」
• 「こんなこともできる?」
• 「ここはどうなっている」
• といった疑問があれば、随時質問してください。
Log
ロギングライブラリ。ログレベルの設定、フォーマット、ファイルサイズ
や日付によるローテーションなど。
using namespace boost::log;
add_file_log("log.txt");
!
// infoレベル以上を出力し、それ以外は捨てる
core::get()->set_filter(
trivial::severity >= trivial::info
);
!
BOOST_LOG_TRIVIAL(debug) << "デバッグメッセージ";
BOOST_LOG_TRIVIAL(info) << "情報メッセージ";
BOOST_LOG_TRIVIAL(error) << "エラーメッセージ";
BOOST_LOG_TRIVIAL(fatal) << "致命的なエラーメッセージ";
TTI (Type Traits Introspection)
型がどんな情報を持っているかコンパイル時に調べるライブラリ。
// メンバ関数mf()を持っているか判定するメタ関数を生成する
BOOST_TTI_HAS_MEMBER_FUNCTION(mf)
!
struct X {
int mf(int, int);

};
!
型Xが、intを2つ受け取り、intを返すメンバ関数mf()を持っているか
constexpr bool b = has_member_function_mf<
X,
int,
boost::mpl::vector<int, int>
>::value;
Type Erasure 1/2
コンセプトで実行時多相性を表現するライブラリ。
「できること」を列挙して設定したany型に、それが可能な

あらゆる型のオブジェクトを実行時に代入して使用できる。
using namespace boost::type_erasure;
any<
boost::mpl::vector<
copy_constructible<>, // コピー構築できること
incrementable<>, // インクリメントできること
ostreamable<> // ストリーム出力できること
>
> x(10); // int値をコピー(要件を満たしている型ならなんでもOK)
++x;
std::cout << x << std::endl; // 「11」が出力される
Type Erasure 2/2
コンセプトは、自分で定義できる。
// 1引数をとるpush_back()メンバ関数を持っていること、
// というコンセプトを定義する。
BOOST_TYPE_ERASURE_MEMBER((has_push_back), push_back, 1)
!
// intを引数にとり、voidを返すpush_backを持っている、
// コンテナへの参照を受け取って操作する
void append_many(any<has_push_back<void(int)>, _self&> container)
{
for(int i = 0; i < 10; ++i)
container.push_back(i);
}
Predef
コンパイラ、アーキテクチャ、OS、標準ライブラリなどの情報を

取得するライブラリ。
これらのマクロは必ず定義されるので、if文で使ってもいい。
// GCCかどうか
#if BOOST_COMP_GNUC
#if BOOST_COMP_GNUC >= BOOST_VERSION_NUMBER(4,0,0)
const char* the_compiler = "バージョン4以上のGNU GCC,"
#else
const char* the_compiler = "バージョン4未満のGNU GCC"
#endif
#else
const char* the_compiler = "GNU GCCではない"
#endif
Align
アラインメント関係の情報を取得するメタ関数や

メモリアロケータなど。
// 16バイトアラインメントでメモリ確保するアロケータを、
// vectorで使用する
std::vector<
char,
boost::alignment::aligned_allocator<char, 16>
> v(100);
Type Index
std::type_info/std::type_indexのBoost版。
RTTIの無効化や、型のデマングル名などに対応している。
using boost::typeindex::type_id;
std::cout << type_id<int>().raw_name() << std::endl;
std::cout << type_id<int>().pretty_name() << std::endl;
i
int
(GCCの場合)
Endian
エンディアン操作のライブラリ。
エンディアン指定の算術型や、エンディアン変換の関数など。
using namespace boost::endian;
!
little_uint8_t a; // リトルエンディアンの8ビット符号なし整数型
big_uint8_t b; // ビッグエンディアンの(以下略)
!
std::uint8_t x = 0;
std::ifstream file(…);
file.read(&x, sizeof(uint8_t));
!
x = big_to_native(x); // ビッグエンディアンのデータを、
// その環境のエンディアンに変換。
Sort
範囲を並び替えるアルゴリズムのライブラリ。
巨大な配列をソートする際にstd::sort()よりも高速になる、
spreadsort()が含まれている。
using namespace boost::sort::spreadsort;
!
std::vector<int> v; // N >= 10,000
spreadsort(v.begin(), v.end());
• 整数型
• 浮動小数点数型
• 文字列型
この関数に指定できるのは、以下の型の範囲のみ:
最近のBoost事情 1/2
• 開発のリポジトリが、SubversionからGitHubに移行しまし
た。github.com/boostorg
• これは、ユーザーからの貢献を受け付けやすくするのが
主な目的です。
• pull requestすれば取り込んでもらえます。
最近のBoost事情 2/2
• CMT (Community Maintenance Team)という制度が

始まりました。
• Boostの各ライブラリは、だいたい作者が一人で

メンテナンスしています。

作者が失踪して、メンテナンスされない時期がたまにあり
ます。
• CMTに合意したライブラリは、何人かのBoost開発者が
適時メンテナンスします。

(pull requestを代わりに受け付けたり)
本日の紹介はここまで
• 今回の「Boostライブラリ一周の旅」では、

Boost 1.54.0から1.58.0までの更新を紹介しました。
• 発表では差分のみを紹介していますが、

これまで紹介したものをマージした資料も公開しています。
• 今回Boostに興味を持たれた方は、そちらのマージした資料
もぜひご覧ください。
1 de 17

Recomendados

Boost tour 1.60.0 por
Boost tour 1.60.0Boost tour 1.60.0
Boost tour 1.60.0Akira Takahashi
2.1K vistas12 diapositivas
Flash lite概要 por
Flash lite概要Flash lite概要
Flash lite概要Toshiharu Shirai
781 vistas7 diapositivas
マスタリング バベル por
マスタリング バベルマスタリング バベル
マスタリング バベル道化師 堂華
1.5K vistas39 diapositivas
オーム社開発部がTeXを使う3つのおもな理由 por
オーム社開発部がTeXを使う3つのおもな理由オーム社開発部がTeXを使う3つのおもな理由
オーム社開発部がTeXを使う3つのおもな理由Keiichiro Shikano
2K vistas2 diapositivas
LT駆動開発08 - 無限のディスク領域を手に入れよう(妄想編) por
LT駆動開発08 - 無限のディスク領域を手に入れよう(妄想編)LT駆動開発08 - 無限のディスク領域を手に入れよう(妄想編)
LT駆動開発08 - 無限のディスク領域を手に入れよう(妄想編)Kazuya Matsubara
676 vistas16 diapositivas
Visual C++で使えるC++11 por
Visual C++で使えるC++11Visual C++で使えるC++11
Visual C++で使えるC++11nekko1119
36.8K vistas96 diapositivas

Más contenido relacionado

Similar a Boost Tour 1_58_0

Boost Overview por
Boost OverviewBoost Overview
Boost OverviewAkira Takahashi
2.2K vistas17 diapositivas
Study3 boost por
Study3 boostStudy3 boost
Study3 boostKohsuke Yuasa
1.7K vistas45 diapositivas
オープンソースプロジェクトのQAについて - LibreOfficeのケースから- por
オープンソースプロジェクトのQAについて  - LibreOfficeのケースから-オープンソースプロジェクトのQAについて  - LibreOfficeのケースから-
オープンソースプロジェクトのQAについて - LibreOfficeのケースから-Shinji Enoki
1.1K vistas45 diapositivas
OSSライセンス入門 por
OSSライセンス入門OSSライセンス入門
OSSライセンス入門KageShiron
525 vistas49 diapositivas
Github Actionsで始めるROS/ROS2のCI por
Github Actionsで始めるROS/ROS2のCIGithub Actionsで始めるROS/ROS2のCI
Github Actionsで始めるROS/ROS2のCIAtsuki Yokota
2K vistas16 diapositivas
Git & ブランチモデルで学ぶ バージョン管理入門 por
Git & ブランチモデルで学ぶ バージョン管理入門Git & ブランチモデルで学ぶ バージョン管理入門
Git & ブランチモデルで学ぶ バージョン管理入門kazuki kuriyama
274 vistas86 diapositivas

Similar a Boost Tour 1_58_0(8)

オープンソースプロジェクトのQAについて - LibreOfficeのケースから- por Shinji Enoki
オープンソースプロジェクトのQAについて  - LibreOfficeのケースから-オープンソースプロジェクトのQAについて  - LibreOfficeのケースから-
オープンソースプロジェクトのQAについて - LibreOfficeのケースから-
Shinji Enoki1.1K vistas
OSSライセンス入門 por KageShiron
OSSライセンス入門OSSライセンス入門
OSSライセンス入門
KageShiron525 vistas
Github Actionsで始めるROS/ROS2のCI por Atsuki Yokota
Github Actionsで始めるROS/ROS2のCIGithub Actionsで始めるROS/ROS2のCI
Github Actionsで始めるROS/ROS2のCI
Atsuki Yokota2K vistas
Git & ブランチモデルで学ぶ バージョン管理入門 por kazuki kuriyama
Git & ブランチモデルで学ぶ バージョン管理入門Git & ブランチモデルで学ぶ バージョン管理入門
Git & ブランチモデルで学ぶ バージョン管理入門
kazuki kuriyama274 vistas
たまにはライセンスの話をしよう 20110211 por Yutaka Kachi
たまにはライセンスの話をしよう 20110211たまにはライセンスの話をしよう 20110211
たまにはライセンスの話をしよう 20110211
Yutaka Kachi2.1K vistas

Más de Akira Takahashi

Cpp20 overview language features por
Cpp20 overview language featuresCpp20 overview language features
Cpp20 overview language featuresAkira Takahashi
891 vistas28 diapositivas
Cppmix 02 por
Cppmix 02Cppmix 02
Cppmix 02Akira Takahashi
675 vistas7 diapositivas
Cppmix 01 por
Cppmix 01Cppmix 01
Cppmix 01Akira Takahashi
1K vistas11 diapositivas
Modern C++ Learning por
Modern C++ LearningModern C++ Learning
Modern C++ LearningAkira Takahashi
18.5K vistas12 diapositivas
cpprefjp documentation por
cpprefjp documentationcpprefjp documentation
cpprefjp documentationAkira Takahashi
1.3K vistas23 diapositivas
C++1z draft por
C++1z draftC++1z draft
C++1z draftAkira Takahashi
6.6K vistas67 diapositivas

Más de Akira Takahashi(20)

Cpp20 overview language features por Akira Takahashi
Cpp20 overview language featuresCpp20 overview language features
Cpp20 overview language features
Akira Takahashi891 vistas
C++14 solve explicit_default_constructor por Akira Takahashi
C++14 solve explicit_default_constructorC++14 solve explicit_default_constructor
C++14 solve explicit_default_constructor
Akira Takahashi7.3K vistas
C++14 relaxing constraints on constexpr por Akira Takahashi
C++14 relaxing constraints on constexprC++14 relaxing constraints on constexpr
C++14 relaxing constraints on constexpr
Akira Takahashi4.7K vistas

Boost Tour 1_58_0