在用C++编写一些代码时,我想表达一下这样的概念:对于X类型的组件,其最小值是kMinValue,最大值是kMaxValue。为此,我做了类似的事情:

template <typename ComponentType>
struct CompTraits
{

};

template <>
struct CompTraits<unsigned char>
{
    typedef unsigned char ComponentType;
    enum{
        kMinValue = 0,
        kMaxValue = 255
    };
};

而且,我可以引用CompTraits<unsigned char>::kMinValue。但是,我无法理解 float 数据类型的窍门。有人可以帮忙为浮点数定义相同的东西吗?

提前致谢。

最佳答案

您可以使用std::numeric_limits而不是常量,但是如果您只需要kMinValuekMaxValue-您可以使用类似这样的内容

C++ 03

template<>
struct CompTraits<float>
{
   static const float kMinValue;
   static const float kMaxValue;
};

const float CompTraits<float>::kMinValue = std::numeric_limits<float>::min();
const float CompTraits<float>::kMaxValue = std::numeric_limits<float>::max();

C++ 11
template<>
struct CompTraits<float>
{
   static constexpr float kMinValue = std::numeric_limits<float>::min();
   static constexpr float kMaxValue = std::numeric_limits<float>::max();
};

对于您的情况,您只需使用
template<>
struct CompTraits<float>
{
   static const float kMinValue = 0.0f;
   static const float kMaxValue = 1.0f;
};

关于c++ - 定义浮点的值(value)特征,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16083926/

10-11 00:38