関数の最適化を試みていfun_a1()
ます。変数j
は のスコープでは変更されませんfun_a1()
。したがって、「i」反復ごとに j==1 または 2 または 3 をチェックすることは、明らかに CPU サイクルの無駄です。しかし、条件評価をループの外に出そうとすると、条件ごとに冗長なループを書かなければなりません。C では、関数ポインターを使用してこれを簡単に解決できます。ただし、C++ は非静的関数へのポインターを許可しません。不思議な「メンバーへのポインター」を説明するリンクがいくつか見つかりました。(例 1、例 2 ) しかし、オブジェクト自体の内部から、たとえば fun_a() の内部からどのように使用すればよいかはまだ明確ではありません。または、他の方法で最適化できますか?
class A{
void fun_b(int i);
void fun_c(int i);
void fun_d(int i);
void fun_f(int i);
void fun_a1(int j){
for(int i=0; i<1000; i++){
if(j==1) fun_b(i);
else if(j==2) fun_c(i);
else if(j==3) fun_d(i);
fun_f(i);
}
}
void fun_a2(int j){
if(j==1){
for(int i=0; i<1000; i++) {
fun_b(i);
fun_f(i);
}
}
else if(j==2){
for(int i=0; i<1000; i++) {
fun_c(i);
fun_f(i);
}
}
else if(j==3){
for(int i=0; i<1000; i++) {
fun_d(i);
fun_f(i);
}
}
}
};