gpt4 book ai didi

c++ - 用户指定的参数来确定在大循环中调用哪个函数

转载 作者:搜寻专家 更新时间:2023-10-31 00:26:56 26 4
gpt4 key购买 nike

我正在开发一个在主程序中有一个大循环(数百万次迭代)的程序。在循环中有函数调用,但调用的函数取决于用户指定的参数。因此,一个天真的解决方案是在 main 的循环内使用条件语句来检查用户指定的参数(参见代码片段)。然而,这并不是最好的解决方案,因为我希望我的程序运行得更快(优化非常重要)。我也考虑过函数指针和虚函数,但这些对于我的目的来说似乎也很慢(到目前为止,函数指针是我最好的选择,因为无论如何都不能内联函数,因为调用哪个函数是在运行时确定的)。

我认为我的问题最好用一个例子来说明,因为我很难用语言表达它:

int func1(params){
//Do stuff
}

int func2(params){
//Do other stuff
}

int func3(params){
//Do different stuff
}

int main(int argc, char** argv){

int some_value;

for(int i = 0; i < 10000000; i++){
if(argv[1] == option_one){
some_value += func1(params);
}

if(argv[1] == option_two){
some_value += func2(params);
}
if(argv[1] == option_three){
some_value += func3(params);
}
}
}

这似乎是一个很常见的问题,那么是否有有效的解决方案呢?

提前致谢!

最佳答案

换一种方式:

if (argv[1] == option_one){
for(int i = 0; i < 10000000; i++){
some_value += func1(params);
}
} else if (argv[1] == option_two){
for(int i = 0; i < 10000000; i++){
some_value += func2(params);
}
} else if (argv[1] == option_three){
for(int i = 0; i < 10000000; i++){
some_value += func3(params);
}
}

可能为循环创建模板函数以避免重复。

template <typename F>
int my_accumulate(F&& f)
{
int some_value = 0;
for (int i = 0; i != 10'000'000; ++i) {
some_value += f(params);
}
return some_value;
}

然后

if (argv[1] == option_one){
some_value = my_accumulate(&func1);
} else if (argv[1] == option_two){
some_value = my_accumulate(&func2);
} else if (argv[1] == option_three){
some_value = my_accumulate(&func3);
}

关于c++ - 用户指定的参数来确定在大循环中调用哪个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50740021/

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