我知道,如果我实例化一个模板,例如:
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 只能用四个值之一调用。
仅仅是编译器必须围绕需要实例化的四个单独的函数模板(实际上是我试图避免手动执行的操作)放置一个条件流并且它不知道如何?
有没有更优雅的方式来做到这一点?
编辑:澄清 - 不太简单的实现使用整数值来应用一些元程序以在函数内进行类型选择。