【问题标题】: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) 的优点。
【解决方案2】:
不,您不能为指针类型或任何其他内置类型重载 [] 运算符。事实上,ptr[N] 已经是*(ptr + N) 的简写。
如果要重载[] 运算符,则需要定义自己的类来包装指针。