c++ - 通过重载 operator[] 附加到数组

标签 c++

我想在 C++ 中定义一个构造 a[] = 1,它允许我附加到自定义数组对象,而不是使用类似 push_back() 的东西。

是否可以通过 C++ 中的某些运算符重载来实现此目的?

我正在考虑 [] 返回一个重载 = 的引用。然而operator [](void)是无效的,但也许有什么技巧?

最佳答案

我的强烈建议是只创建一个 push_back 方法。这是惯用的,人们现在做什么。任何其他技巧都会让用户感到惊讶。

但是如果你坚持这里有一些你可以做的技巧:

struct To_back {};
constexpr To_back to_back;

struct X
{
    auto operator[](To_back) -> Back_inserter_proxy
    {
        return Back_inserter_proxy{*this};
    }
};
X x;

x[to_back] = 24;

或:

struct X
{
    auto operator%=(int elem)
    {
        // push back here
    }
    // or
    auto operator<<(int elem)
    {
        // push back here
    }
};
X x
x %= 24;
// or
x << 24;

但我重申:我强烈建议不要使用这些技巧,尤其是因为有一种简单的惯用方法可以做到这一点:push_back

关于c++ - 通过重载 operator[] 附加到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46377725/

相关文章:

c++ - 共享或私有(private) openmp 代码中的结构化类型变量

c++ - 是否可以从宏定义宏

c++ - 使用带有 clang++ 而不是 g++ 的 std::acos 的 Constexpr 编译错误

c++ - C++中二维数组的标准实现

c++ - 共享内存 STL 映射

c++ - 我如何处理无效的异常处理例程?

c++ - Const 数组从另一个 const 数组初始化

c++ - 将整数字符串解析为标准 vector ?

c++ - Visual Studio Express 中访问说明符后的缩进问题

c++ - 如何在 C++ 中动态创建具有列表底层数据结构的队列?