【问题标题】:overload operator[ ] for a non-class type非类类型的重载运算符[]
【发布时间】:2012-03-06 01:59:04
【问题描述】:

我想知道是否有办法为 C++ 中的非类类型重载 operator[]。

基本上,有一种数据类型是指针(来自 CoreFoundation 的 CFDictionaryRef)。但它不是一个类(我知道允许为特定类重载 operator[])。我知道如何访问 CFDictionaryRef 中的每个元素(例如,通过使用 CFDictionaryGetIndex(CFIndex index); )。我想让它简化,这样我就不必每次都编写该函数调用。我想为 CFDictionaryRef 重载 operator[]。但是由于它不是一个类,所以据我所知,这是不可能的。

有人有什么建议吗?

【问题讨论】:

    标签: c++ operator-overloading


    【解决方案1】:

    你说得对,在非用户定义类型上重载运算符是不可能的。

    您可能会做的是将指针包装在一个类中并重载该类本身的运算符。由于您只能重载类类型的运算符,因此这是唯一的选择。

    class CFDictionaryRefWrapper {
    public:
        CFDictionaryRefWrapper(CFDictionaryRef r) : dref(r) { }
    
        CFDictionaryRef dref;
    
        Type operator[](unsigned int index) {
            /* do whatever with dref */
        }
    };
    

    如果您需要,这还具有能够自动管理指针生命周期 (RAII) 的优点。

    【讨论】:

    • 是的,我想我会把它放到一个 Wrapper 中
    【解决方案2】:

    不,您不能为指针类型或任何其他内置类型重载 [] 运算符。事实上,ptr[N] 已经是*(ptr + N) 的简写。

    如果要重载[] 运算符,则需要定义自己的类来包装指针。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-19
      • 2014-03-27
      • 1970-01-01
      • 2016-01-25
      • 2015-01-29
      • 2015-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多