【发布时间】:2011-11-15 10:17:37
【问题描述】:
我想写一个符号函数模板。我是这样做的:
template<class T> T sign(const T &value)
{
if (value > 0) return 1;
else if (value < 0) return -1;
return 0;
}
它正在工作,但我不确定当我的函数实际上应该返回 T 时返回一个数值是否好。这个函数好吗?
【问题讨论】:
-
您依赖于隐式转换 - 这可能很危险,除非您了解所有类型的
T确切行为。 -
是的,这可能很危险,但这似乎正是预期的行为 - 符号是相同类型的 -1/0/1。
-
您可能应该返回一个
int,因为它可能比您的 T 更有效(想象一下,如果 T 是一个多预定义的 bignum)。或者您可以使用enum { Negative=-1, Zero=0, Positive=+1 }甚至(如果是 C++11)枚举类。