我想知道是否有一种方法可以在C ++中为一个非类类型重载operator []。
基本上,有一种数据类型是指针(来自CoreFoundation的CFDictionaryRef)。但它不是一个类(我知道允许为特定类重载operator [])。我知道如何访问CFDictionaryRef中的每个元素(例如,通过使用CFDictionaryGetIndex(CFIndex索引);)。我想简化它,以便我不必每次都写这个函数调用。我想为CFDictionaryRef重载operator []。但是,由于它不是一个阶级,从我看到的,它是不可能的。
有人有任何建议吗?
答案 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)
的缩写。
如果要重载[]
运算符,则需要定义自己的包装指针的类。