是否有任何理由不能将double作为带模板的参数类型?
例如:
template<int N>//-< Legal
struct
{
};
template<double N>//-< Illegal
struct
{
};
C ++ 11中是否有更新?
答案 0 :(得分:5)
鉴于浮点算术仅提供模糊结果(sqrt(2.0)*sqrt(2.0)
可能不等于2.0
),您如何建议使用double
作为模板参数可能有用?如果您有模板
template<double D> // not allowed in C++
class X {};
并专注于
template<>
class X<2.0> {};
然后
X<1.0+1.0> x;
可能不会指专业化。
我会说这严重限制了它的用处,我称之为残废。
答案 1 :(得分:5)
这与精度有关,浮点数无法精确表示,并且您引用相同类型的可能性取决于数字的表示方式。请考虑使用整数尾数和指数作为模板参数......
答案 2 :(得分:2)
你只能对模板参数使用整数类型,但你可以通过使用两个整数来欺骗你的方式使用小数值,一个作为尾数,一个作为指数,一个作为分子,一个作为分母。使用巧妙的元编程技术,您甚至可以将它们降低到最低的条件,因此如果您使用有理数,则X&lt; 3,6&gt;将与X&lt; 1,2&gt;
一样工作你可以做什么以及你应该做什么不一定相同。考虑这是否真的是正确的实用方法,还是仅仅是元编程中的练习。