(c ++)优化此循环的任何方法?不能将函数指针用作其内部类

Ano*_* Y. 1 c++ pointer-to-member loop-unrolling

试图优化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);
            }           
        }       
    }   
};
Run Code Online (Sandbox Code Playgroud)

nne*_*neo 6

这是你如何使用指向成员函数的指针:

void (A::*fun)(int);
if(j == 1) fun = &A::fun_b;
else if(j == 2) fun = &A::fun_c;
else if(j == 3) fun = &A::fun_d;

for(int i=0; i<1000; i++) {
    (this->*fun)(i);
    fun_f(i);
}
Run Code Online (Sandbox Code Playgroud)