我正在编写一些用于处理小数数据的目标代码(而不是浮点数据),到目前为止还有以下内容:
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
类型,还是还有其他我不知道的东西?
答案 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> {};