繁体   English   中英

如何为编译时已知的参数的多个值编译函数

[英]How to compile a function for multiple values of a parameter known in compile-time

我正在编写一个C ++函数,该函数目前通过模板接收参数。 函数很复杂,但是为了简化问题,请考虑如下函数:

template <int a> int foo(int b){
    return a+b;
}

但在最后的程序, a在上面的函数将在运行时(未编译时间),然而,用户被强制以提供已知的a中的范围为1〜5。换句话说,我可能不知道a精确地编译时间,但我确定a将是1、2、3、4或5之一。
我如何才能针对不同的a分别编译上述函数5次,并在运行时选择运行适当的函数?
一种解决方案是定义不同版本的foofoo_1foo_2 ,...为不同的a编译,但是显然会增加复制代码的数量,尤其是在函数较大时。 有更好的解决方案吗?

编辑
我的目标是避免出现以下情况,并在运行时进行switch以决定使用哪个。

int foo_1(int b){
    return 1+b;
}
int foo_2(int b){
    return 2+b;
}
int foo_3(int b){
    return 3+b;
}
int foo_4(int b){
    return 4+b;
}
int foo_5(int b){
    return 5+b;
}

我想到了这样的事情:

template <int a> int foo_impl(int b){
    return a+b;
}

int (*foos[5])(int) = {
   foo_impl<1>,
   foo_impl<2>,
   foo_impl<3>,
   foo_impl<4>,
   foo_impl<5>
};

int foo(int a, int b)
{
    return (foos[a-1])(b);
}

我希望在您的真实代码中有真正的好处:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM