1

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

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

但在最终程序中,a上述函数将在运行时(而不是编译时)知道,但是用户被迫a在 1 到 5 的范围内提供。换句话说,我可能不知道a编译时的确切时间,但我确定那a将是 1、2、3、4 或 5 之一。
我怎样才能将上述函数编译 5 次以获得不同的a结果,并在运行时选择运行正确的函数?
一种解决方案是定义不同版本的foolike foo_1, foo_2, ... 为不同的 s 编译,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;
}
4

1 回答 1

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

我希望您的真实代码对此有真正的好处:)

于 2014-06-05T19:31:22.407 回答