C++ 包装简单算术类型
c++ wrapping simple arithmetic types
我想用默认构造函数扩展 int32_t 和 int64_t。我想我必须使用来自 boost opertators.hpp 的 operator<> 和 operator2<> 来定义新类型。
- 够不够,有例子吗?
- 这种方法是否对 c++11/14 有任何影响。我没有看到 operators.hpp 中使用的通用引用。简单地键入这些 类 以利用 c++11/14 功能是否有意义 - 这很乏味但相对简单?
我理解动机,但从不初始化整数类型的做法最终可能会减少心痛。
不过,这可能是一个很好的起点。您会注意到正常算术不需要运算符。
#include <iostream>
template<class Type, Type original_value>
struct safe_integral
{
safe_integral()
: _v(original_value)
{}
safe_integral(Type t)
: _v(t)
{}
operator const Type&() const { return _v; }
operator Type&() { return _v; }
private:
Type _v;
};
using namespace std;
auto main() -> int
{
using safe_int = safe_integral<int, 0>;
safe_int x;
cout << "original value: " << x << endl;
x += 6;
cout << "adding 6: " << x << endl;
safe_int y = x;
safe_int z = x + 6;
safe_int w = x + z;
cout << "w is : " << w << endl;
return 0;
}
预期输出:
original value: 0
adding 6: 6
w is : 18
我想用默认构造函数扩展 int32_t 和 int64_t。我想我必须使用来自 boost opertators.hpp 的 operator<> 和 operator2<> 来定义新类型。
- 够不够,有例子吗?
- 这种方法是否对 c++11/14 有任何影响。我没有看到 operators.hpp 中使用的通用引用。简单地键入这些 类 以利用 c++11/14 功能是否有意义 - 这很乏味但相对简单?
我理解动机,但从不初始化整数类型的做法最终可能会减少心痛。
不过,这可能是一个很好的起点。您会注意到正常算术不需要运算符。
#include <iostream>
template<class Type, Type original_value>
struct safe_integral
{
safe_integral()
: _v(original_value)
{}
safe_integral(Type t)
: _v(t)
{}
operator const Type&() const { return _v; }
operator Type&() { return _v; }
private:
Type _v;
};
using namespace std;
auto main() -> int
{
using safe_int = safe_integral<int, 0>;
safe_int x;
cout << "original value: " << x << endl;
x += 6;
cout << "adding 6: " << x << endl;
safe_int y = x;
safe_int z = x + 6;
safe_int w = x + z;
cout << "w is : " << w << endl;
return 0;
}
预期输出:
original value: 0
adding 6: 6
w is : 18