繁体   English   中英

如何将浮点值用作非类型模板参数?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM