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

The*_* do 6 c++ templates c++11

是否有任何理由不能将double作为参数类型与模板?
例如:

template<int N>//-< Legal
struct
{
};  

template<double N>//-< Illegal
struct
{
};  
Run Code Online (Sandbox Code Playgroud)

在C++ 11中是否有任何更新?

sbi*_*sbi 5

鉴于浮点算术仅给出模糊结果(sqrt(2.0)*sqrt(2.0)可能不相等2.0),您如何建议使用double模板参数可能有用?如果你有一个模板

template<double D>  // not allowed in C++
class X {};
Run Code Online (Sandbox Code Playgroud)

并专门化

template<>
class X<2.0> {};
Run Code Online (Sandbox Code Playgroud)

然后

X<1.0+1.0> x;
Run Code Online (Sandbox Code Playgroud)

可能不会提到专业化.

我会说这严重限制了它的用处,我称之为残废.


Nim*_*Nim 5

这与精度有关,浮点数无法精确表示,并且您引用相同类型的可能性取决于数字的表示方式.考虑使用整数尾数和指数作为模板参数...

  • @There,几乎......在内部这是一个微不足道的计算,`double v = static_cast <double>(M)*:: exp10(static_cast <double>(E));` (2认同)