[過去ログ] Boost総合スレ part7 (989レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
139(3): デフォルトの名無しさん [sage] 2009/02/22(日) 16:50:27 AAS
クラスのメンバ関数をパラメータ的に扱いたいんだけどどうすればいいかな。
こんな感じのことがしたいんだけど。
class A
{
public:
void func_a1();
void func_a2();
};
class B
{
public:
void func_b();
}
template<???>
void call_twice(???)
{
//オブジェクトとメンバ関数を引数にとってメンバ関数を2回呼ぶ
}
int main()
{
A a;
B b;
call_twice(a,func_a1);
call_twice(a,func_a2);
call_twice(b,func_b);
}
143(1): 139 [sage] 2009/02/22(日) 21:29:21 AAS
レスどうもです。
boost.function使ってみました。結構いい感じ。
で、つかぬことをおききしますがboost::functioinを使った場合インライン展開はされるのでしょうか。
速度が必要なもんで気になります。
一応アセンブラをみて見たんですが俺にはよくわからない。(´・ω・`)
関数ポインタならインライン展開されなさそうなきがするんですが。
145: 139 [sage] 2009/02/22(日) 21:47:28 AAS
そですかー(´・ω・`)
ありがとうございます。
boostってテンプレートだけじゃなくて意外と中でマクロも使われてるんですね。
いっそマクロの併用も検討するか…
150: 139 [sage] 2009/02/23(月) 00:15:36 AAS
>>149149(2): デフォルトの名無しさん [sage] 2009/02/22(日) 23:51:22 AAS
147くらいのコードだと頭のいいコンパイラはインライン展開しちゃうけど、
たぶん142は何らかのデータ構造にメンバ関数を保存して必要なときに
実行とかいう使い方をするだろうから最終的には間接参照が最低一回
必要になると思う。
とりあえずテンプレート使ってみた版
template <class T, void (T::* func)()>
void call_twice(T t) {
(t.*func)();
(t.*func)();
}
int main() {
A a;
B b;
call_twice<A, &A::func_a1>(a);
call_twice<A, &A::func_a2>(a);
call_twice<B, &B::func_b>(b);
}
うおっ!なんかすごいのきたw
テンプレートの引数にvoid (T::* func)()なんて使えるのかー。
カルチャーショックだぜ。
もっと精進せねば。
どうもありがとうございます。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.035s