C++相談室 part166 (569レス)
上下前次1-新
抽出解除 レス栞
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
229(2): デフォルトの名無しさん (ワッチョイ eea1-bAVr) [sage] 2025/06/05(木) 08:28:31.27 ID:ExyrcTL10(2/2) AAS
コールバック関数の自由な登録というのをstd::function<T>として登録することを考えて居たけんども
素のstd::function<T>ではチェックが自由にできないということがわかりた……
MSVCとかで関数を入れたstd::function<double (int, long)>に対し関数オブジェクトfooとしてtarget<foo>()するか
反対のことをしたらcatchできない例外が発生すた、(多分構造化例外か何かでSTLの仕様的にはおそらく未定義動作
故に素のstd::function<T>を使おうとする限り、入れるブツをdynamic_cast可能な関数オブジェクトに限定するとかしないと
手の打ちようが無いorz
現実解はstd::function<T>をwrapした「コールバック関数クラス」の創設……
231: はちみつ餃子◆8X2XSCHEME (ワッチョイ 8d32-FMYs) [sage] 2025/06/05(木) 12:10:53.33 ID:BNqgyRrD0(1/3) AAS
>>229
target で指定した型と実際に入っている動的な型が合致しない場合はヌルポインタが返される仕様になっていてそれ自体は問題ない。
実際のコードがどうなってるか示されていないけれど、 >>226 の延長線のようなコードだとしたらヌルポインタ返ってきたときヌルポインタに単項 * を適用していることになるし、更にはそのメンバ関数である operator== を呼び出したりデータメンバ m_objID にアクセスしたりしてるのが全部ダメ。
232: デフォルトの名無しさん (ワッチョイ d142-hbVI) [sage] 2025/06/05(木) 13:25:12.77 ID:EjJmkkft0(1) AAS
>>229
あんまり深く理解してないけど
コールバックの責任範囲(待機の解除とか)が違うのを明確に管理したい
->責任範囲の違いごとに基底クラスを用意して、コールバックは派生クラスで実装させる。
みたいなガチガチの管理がいいんじゃないんかね。
コールバック実装側にも管理する義務を押し付けられるし、基本的なフレームワーク(待機の解除手順とか)は基底クラス側で実装できる。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.037s