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

时间:2014-06-05 19:23:02

标签: c++ templates compile-time compile-time-constant

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

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

但是在最终的程序中,上面函数中的a将在运行时(不是编译时)知道,但是用户被迫在1到5的范围内提供a。换句话说,我在编译时可能不知道a,但我确信a将是1,2,3,4或5中的一个。 如何为不同的a编译上述函数5次,并在运行时选择运行正确的函数? 一种解决方案是定义foo的不同版本,如foo_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;
}

1 个答案:

答案 0 :(得分:4)

想到这样的事情:

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

我希望你真正的代码真的有益于此:)