c++ - 模板代码的高精度常量

标签 c++

我正在编写一个模板类,它采用类浮点类型(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/

相关文章:

c++ - 代码在尝试打开 QDialog 时卡住

c++ - 在cocos2d-x项目中使用admob和objective-c时出现的问题

c++ - 奇怪的 pow(x, y);行为

c++ - 复制构造函数返回临时对象

c++ - 获取 char 数组的一部分

c++ - 如何一次将多个值分配给一个结构体?

c++ - 将 malloc 更改为新的运算符

c++ - 类问题中的 CUDA 内存管理/指针

c++ - 将 CRC uint 转换为 QByteArray QT - C++

C++ 编译器不检测类模板中的错误