09/02/22 23:51:22
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);
}