gpt4 book ai didi

c++ - (c++) 有什么方法可以优化这个循环?不能在类中使用函数指针

转载 作者:行者123 更新时间:2023-11-30 01:23:35 25 4
gpt4 key购买 nike

尝试优化 fun_a1() 函数。变量 jfun_a1() 的范围内没有变化。因此,为每个“i”迭代检查 j==1 或 2 或 3 显然是对 CPU 周期的浪费。但是如果我试图将条件评估带到循环之外,我就必须为每个条件编写冗余循环。在 C 中,我可以使用函数指针轻松解决这个问题。但是,C++ 不允许指向非静态函数的指针。我发现了一些描述神秘的“指向成员的指针”的链接。 ( example 1 , example 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);
}
}
}
};

最佳答案

下面是如何使用指向成员函数的指针:

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);
}

关于c++ - (c++) 有什么方法可以优化这个循环?不能在类中使用函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14794703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com