我想用默认构造函数扩展int32_t和int64_t。我想我必须使用operator<>定义新类型和operator2<>来自boost opertators.hpp。
答案 0 :(得分:2)
我明白了这个动机,但是从来没有一个完整类型未初始化的做法最终可能会减少心痛。
然而,这可能是一个很好的起点。您会注意到正常算术不需要运算符。
#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