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使おう!!
何か質問?
© Copyright 2026 ExpyDoc