Boost.Signals2について

Boost.Signals2について
秋津 早苗
僕は誰?

HN : 秋津 早苗

学生

筑波大学のサークルAmusement Creatorsに所属

好きな言語はC++

苦手な言語はC++

好きなゲームジャンルはSTG

苦手なゲームジャンルはSTG
発表の対象

プログラマさん(絵描きさんや音楽屋さんは聞いてもつまらないと思う)

C++使っている人

Boostを使っている人 or 使いたいと思っている人

怖くない人
基本的なゲームの仕組み
Scene::update() {
地形をupdate
自機をupdate
敵をupdate
etc…
}
updateが呼ばれたら処理する関数の
リスト作りたくない?
updateが呼ばれたら処理する関数の
リスト作りたくない?
→
Boost.Signals2を使おう!
Boostとは??
 C++のオープンソースライブラリ群
 ヘッダファイルのみのものが多い
 標準ライブラリはboostを基にしているもの
がある
 コンパイル時間がboooooooost!!
Boost.Signals2の使い方
boost::signals2::signal<関数の型> sig;
として
sig.connect(追加したい関数);
とするだけ!!
melpon.org/wandbox/permlink/YxAr5Ectenz
Nr3h5
何を格納できるの?
関数ポインタ
関数オブジェクト
もちろんラムダ式も
つまり関数っぽいものなら大抵格納できる!!
melpon.org/wandbox/permlink/mcITM0e34
Xt098vh
メンバ関数を格納したい?
std::bindはあなたの味方です!
std::bind(&Class::Method,object) でおk!
melpon.org/wandbox/permlink/T6FmFKqA2
K5CjE9U
呼び出す順番を変えたい!
第一引数に整数を渡すとその値が小さい順に読
んでくれる!
melpon.org/wandbox/permlink/bWDrUKNY2
WSBfERm
リストから除外したい時は?
connectした時の返値を使おう!
返値はboost::signals2::connect型
boost::signals2::connect::disconnetを使う!
melpon.org/wandbox/permlink/v3VaffnWDzTH
euso
ある重複して格納された関数をすべて
リストから除外したい時
boost::signals2::disconnectを使う!
melpon.org/wandbox/permlink/OcjdUX8fBd
QdAR4F
deleteされたオブジェクトは除外した
い!!
boost::signals2::signal::slot_type().track()
ってすればいいよ!!
(ただしboost::shared_ptrにしか使えない)
melpon.org/wandbox/permlink/m12qhvIqrH
iYZIoY
signal呼んだ返値はどうなるの?
一番最後に呼ばれたもののoptionalになる!
melpon.org/wandbox/permlink/s5ajAo8h7rj
YTDPM
signal呼んでどんな値を返すのか自分
で定義したい!!
Signalの宣言時にテンプレート引数で指定でき
る!
melpon.org/wandbox/permlink/2e4jO88ZyLI
nWvzH
signal呼んでどんな値を返すのか自分
で定義したい!!
Signalの宣言時にテンプレート引数で指定でき
る!
melpon.org/wandbox/permlink/2e4jO88ZyLI
nWvzH
みんなBoost使おう!!
オマケ
NugetにBoostある!!
ビルドが要らないものしか使わないなら導入は
とても簡単!!!
みんなBoost使おう!!
何か質問?