我正在编写一个模板类,它采用类浮点类型(float、double、decimal、GMP)作为参数。但是,我的类(class)需要各种数字常量。其中一些是有理数 (int/int),而另一些是无理数,可保留到小数点后 30 位左右。
初始化这些常量的最佳方法是什么,所以:
T c1 = <constant>;
其中 T 是模板化类型?
虽然我总是可以使用 double (T c1 = 0.1415926535...) 并依靠编译器/隐式初始化程序转换为适当的类型,但我希望尽可能保留额外的精度。
我对当前的解决方案和 C++0x(或者是 C++1x?)可能带来的解决方案都很感兴趣。
最佳答案
我认为最简单的方法是创建一个专门的容器类来保存常量,如下所示:
template<class T>
class Constants
{
public:
static const T pi = T(3.1415);
};
//Example specialization:
template<>
class Constants<double>
{
public:
static const double pi = 3.1415926535897932384626433832795;
};
在你的真实类里面你可以做这样的事情:
const T c1 = Constants<T>::pi;
这避免了您必须编写完整的专门化类来重新定义这些常量。
请注意,默认行为可以退回到隐式双重赋值。
关于c++ - 模板代码的高精度常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2633670/