【发布时间】:2014-01-29 02:29:59
【问题描述】:
template <int C> class MyClass;
...
template <int C>
double trans(MyClass<C> &a)
{
//return some double
}
//this is supposed to be function template
template <int C>
double func(MyClass<2> &a)
{
//return some double
}
template <int C>
MyClass<C-1> func(MyClass<C> &a)
{
MyClass<C-1> ret;
return ret;
}
template <int C>
double otherFunc(MyClass<C> &a)
{
double result;
if(C == SOME_CONSTANT)
result = func(a);
else
result = trans(func(a));
}
我的问题是我想检查参数otherFunc调用函数模板func(返回双精度)中的模板参数C,而不是类模板func(返回MyClass)的成员函数。但不知何故,编译器试图 func 返回 MyClass in
if(C == SOME_CONSTANT)
result = func(a);
这部分所以我得到了编译器错误(因为 double = MyClass 不可行)。我该如何解决这个问题?
【问题讨论】:
-
otherFunc需要合法才能编译C的值,它被实例化 - 包括if/else语句中的分支永远不能为C的值取值。换句话说,即使SOME_CONSTANT是2,当C不是2时,它仍然会检查result = func(a)代码的合法性——导致您看到的转换错误。怎么修? - 你可以避免if/else,方法是为C != 2提供一个通用的otherFunc模板和一个2的专业化模板。不过,目前还不是很清楚你真正想要达到的目标...... -
我只是想让
func在 C == 2 时的行为与其他行为略有不同。如果您能详细说明一下,我将不胜感激