2012-03-06 239 views
2

我想知道是否有一种方法来重载运算符[]为非类类型在C++中。重载运算符[]为非类类型

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

任何人有任何建议吗?

回答

3

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

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

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

    CFDictionaryRef dref; 

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

如果您需要这样做,还可以自动管理指针(RAII)的生存期。

+0

是的,我想我会把它放入包装 – 2012-03-06 02:21:20

1

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

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

+0

@Benjamin,是的,谢谢 – 2012-03-06 03:31:37