C++“无符号”类

3 c++ objective-c++

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

 class frac {
    public:
       int numerator;
       unsigned int denominator;
 };
Run Code Online (Sandbox Code Playgroud)

我的问题是:
如何配置我的类定义,以便写入unsigned frac foo;使对象与 相同frac foo;,但int numerator;会变成unsigned int numerator;

编辑: 虽然通常我只使用模板 ( frac <unsigned>),但此代码将用于更大的数学 API,我更喜欢最终产品使用unsigned frac语法

扩展: 很多答案都说不可能实现unsigned frac语法,但有谁知道为什么不呢?C++ 编译器是否有一些适用于现有unsigned类型的特殊处理规则,或者我还缺少其他什么?

Mai*_*kel 6

您可以使用模板来实现这些目标。例如

template <class Integral>
class frac {
  public:
    Integral numerator;
    std::make_unsigned_t<Integral> denominator;
};
Run Code Online (Sandbox Code Playgroud)

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

你可以像这样使用这个类:

frac<int> signed;
frac<unsigned> nonnegative;
Run Code Online (Sandbox Code Playgroud)