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> {};
我正在编写一些用于处理小数数据(与浮点数据相对)的目标代码,目前有以下内容:
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> {};