[英]How can I use a floating-point value as a non-type template parameter?
是否有任何理由不能将double作为参数类型与模板?
例如:
template<int N>//-< Legal
struct
{
};
template<double N>//-< Illegal
struct
{
};
在C ++ 11中是否有任何更新?
鉴于浮点算术只给出模糊结果( 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;
可能不会提到专业化。
我会说这严重限制了它的用处,我称之为残废。
这与精度有关,浮点数无法精确表示,并且您引用相同类型的可能性取决于数字的表示方式。 考虑使用整数尾数和指数作为模板参数...
您只能对模板参数使用整数类型,但是您可以通过使用两个整数来欺骗您使用小数值,一个作为尾数,一个作为指数,一个作为分子,一个作为分母。 使用巧妙的元编程技术,您甚至可以将它们降低到最低项,因此如果使用有理数,那么X <3,6>将与X <1,2>相同
你可以做什么,你应该做什么不一定相同。 考虑这是否真的是正确的实践方法,还是仅仅是元编程中的练习。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.