gpt4 book ai didi

c++ - 如何使 C++ 预编译器执行 "loop"

转载 作者:太空宇宙 更新时间:2023-11-04 15:23:44 25 4
gpt4 key购买 nike

我想简化以下代码:

switch (index)
{
case 1:
output = function1();
break;
case 2:
output = function2();
break;
case 3:
output = function3();
break;
....

其中 index 是一个编译时间常量。

如果我要使用预编译器宏,我需要使用它 n 次,其中 n 是案例数。如何将上述代码减少到 O(1) 行代码?

最佳答案

试试这个(假设函数 1-n 是真实名称。并且那个索引,正如你所说,是一个编译时间常量):

#define CALLFUNCTION(x) function##x()

output = CALLFUNCTION(1);

更正:这对变量不起作用,如果直接使用常量会起作用。如果提供的代码是每个 case 语句中的全部,这可能会破坏目的。

根本不需要做切换。或者,您可以使用模板特化。

template<int index> function();

output = function<index>();

并特化每个索引的函数模板。

template<> function<1>(){return 1;} // or {return function1();}

如果它不是编译时常量,则需要像 Fomin Arseniy 建议的那样生成开关。另一种选择是使用函数指针数组

关于c++ - 如何使 C++ 预编译器执行 "loop",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13677100/

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