C++ 包装简单算术类型

c++ wrapping simple arithmetic types

我想用默认构造函数扩展 int32_t 和 int64_t。我想我必须使用来自 boost opertators.hpp 的 operator<> 和 operator2<> 来定义新类型。

  1. 够不够,有例子吗?
  2. 这种方法是否对 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