对非类类型重载operator []

时间:2012-03-06 01:59:04

标签: c++ operator-overloading

我想知道是否有一种方法可以在C ++中为一个非类类型重载operator []。

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

有人有任何建议吗?

2 个答案:

答案 0 :(得分:3)

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

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

class CFDictionaryRefWrapper {
public:
    CFDictionaryRefWrapper(CFDictionaryRef r) : dref(r) { }

    CFDictionaryRef dref;

    Type operator[](unsigned int index) {
        /* do whatever with dref */
    }
};

如果您需要,还可以自动管理指针(RAII)的生命周期。

答案 1 :(得分:1)

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

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