我正在编写一些用于处理小数数据(而不是浮点数据)的目标代码,到目前为止有以下内容:
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类型的特殊处理规则,或者我还缺少其他什么?
您可以使用模板来实现这些目标。例如
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)