C++ "unsigned" 类

C++ "unsigned" classes

我正在编写一些用于处理小数数据(与浮点数据相对)的目标代码,目前有以下内容:

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

我的问题是:
我如何配置我的 class 定义,使 unsigned frac foo; 使对象与 frac foo; 相同,除了 int numerator; 会变成 unsigned int numerator;?

编辑: 虽然通常我只使用模板 (frac <unsigned>),但这段代码涉及更大的数学运算 API,我更希望最终产品使用 unsigned frac 语法

分机: 许多答案都表示无法实现 unsigned frac 语法,但有谁知道为什么不呢? C++ 编译器是否有一些特殊的处理规则来适应现有的 unsigned 类型,或者我还遗漏了什么?

你可以用模板来实现这样的事情。例如

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

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

您可以这样使用 class:

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

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

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> {};