C ++" unsigned"类

时间:2016-03-26 17:52:45

标签: c++ objective-c++

我正在编写一些用于处理小数数据的目标代码(而不是浮点数据),到目前为止还有以下内容:

 class frac {
    public:
       int numerator;
       unsigned int denominator;
 };

我的问题是:
如何配置我的类定义,以便写unsigned frac foo;使对象与frac foo;相同,除了int numerator;将成为unsigned int numerator;

修改 虽然通常我只使用模板(frac <unsigned>),但此代码会进入更大的数学API,我更喜欢最终产品使用unsigned frac语法

扩展: 许多答案都表示不可能实现unsigned frac语法,但有谁知道为什么不呢? C ++编译器是否有一些特殊的处理规则可以适应现有的unsigned类型,还是还有其他我不知道的东西?

2 个答案:

答案 0 :(得分:4)

您可以使用模板实现此类功能。例如

template <class Integral>
class frac {
  public:
    Integral numerator;
    std::make_unsigned_t<Integral> denominator;
};

http://en.cppreference.com/w/cpp/types/make_unsigned

您可以像这样使用此类:

frac<int> signed;
frac<unsigned> nonnegative;

答案 1 :(得分:1)

我不认为这是可能的。您可以使用模板实现类似的功能:

template<typename T>
class frac_template
{
public:
    T numerator;
    unsigned int denominator;
};

class frac : public frac_template<int> {};
class ufrac : public frac_template<unsigned int> {};