目标C++ "unsigned"类

objective C++ "unsigned" classes

本文关键字:unsigned 目标 C++      更新时间:2023-10-16

我正在编写一些用于处理小数数据(与浮点数据相反)的对象代码,到目前为止,我已经完成了以下操作:

 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类型,或者我还缺少什么?

您可以使用Templates实现这些功能。例如

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;

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

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