我知道如果我实例化一个模板,例如:
template<int i>
int ReturnMeDouble()
{
return 2 * i;
}
那么编译器需要在编译时评估i的值。我的问题(为简单起见)是,我希望我的程序根据变量调用两个函数中的一个。我的代码大致如下:
int returnValue = 0;
switch(value)
{
case 1:
case 2:
case 3:
case 4:
returnValue = ReturnMeDouble<value>();
break;
case 5:
case 6:
returnValue = ReturnMeTriple<value>();
break;
}
真正的ReturnMe...函数做的事情要复杂一些。显然,我可以使用switch语句并在每个case语句下提供单独的调用,但是我想知道是否有什么我错过的东西,因为对我来说似乎很明显(如果编译器不这样认为),在第一种情况下,ReturnMeDouble只能使用四个值之一进行调用。
是不是简单地说,编译器需要在需要实例化的四个单独函数模板周围放置条件流(有效地避免手动执行的操作),而它不知道如何执行?
有没有更优雅的方法呢?
编辑:为了澄清-较不平凡的实现使用整数值对函数内的类型选择应用一些元程序。
returnValue
是否在编译时可知。我猜测它是不可知的。 - stardustif
语句。 - Fritz