【发布时间】:2015-08-12 10:06:06
【问题描述】:
基本上,如果我有这个:
template <class T>
inline T Foo(int x)
{
switch (x)
{
case 0:
return true;
break;
case 1:
return false;
break;
case 2:
return 100;
break;
default:
break;
}
}
然后我必须这样使用它:
int x = Foo<int>(2);
bool b = Foo<bool>(0);
如果可能的话,我更希望能够这样做:
int x = Foo(2);
bool b = Foo(0);
我看到了this question,但很难将它应用到我的场景中。任何帮助或指向正确的方向都会很棒。
【问题讨论】:
-
如所写,只需返回一个
int。到bool的隐式转换将做正确的事情。此外,您可能希望在您的default案例中添加一些东西,而不是在函数结束时调用未定义的行为 - 也许会抛出异常。 -
您传递给
Foo的值在编译时是否已知?例如,您可以使用int x = Foo<2> ();。 -
@T.C.这适用于仅使用 int/bool 的情况,但如果我希望有更多返回类型怎么办?
-
正如所写的那样,那似乎是很糟糕的设计。但也许那是因为您在示例中过于简化了问题。如果您知道编译时将返回的类型,为什么要创建一个方法,其 switch 语句的唯一目的似乎是选择返回该类型的正确“内部方法”?为什么不只是有不同的方法?
-
打电话给
int x = Foo(3);会发生什么?