c ++包装简单的算术类型

时间:2015-08-11 17:59:55

标签: c++ c++11 boost operator-overloading

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

  1. 这还不够,有什么例子吗?
  2. 这种方法是否会对c ++ 11/14产生任何影响。我没有看到operator.hpp中使用的通用引用。简单地键入这些类以利用c ++ 11/14的功能是否有意义 - 它既乏味又相对简单?

1 个答案:

答案 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