非类类型的重载运算符[] 我想知道是否有一种方法来为C++中的非类类型重载运算符[]。
基本上,有一种数据类型是指针(来自CoreFoundation的CFDictionaryRef)。但它不是一个类(我知道允许对特定类重载运算符[])。我知道如何访问CFDictionaryRef中的每个元素(例如,通过使用CFDictionaryGetIndex(CFIndex index);)。我想简化它,这样我就不必每次都写那个函数调用了。我想为CFDictionaryRef重载运算符[]。但因为这不是一门课,从我看来,这是不可能的非类类型的重载运算符[] 我想知道是否有一种方法来为C++中的非类类型重载运算符[]。,c++,operator-overloading,C++,Operator Overloading,基本上,有一种数据类型是指针(来自CoreFoundation的CFDictionaryRef)。但它不是一个类(我知道允许对特定类重载运算符[])。我知道如何访问CFDictionaryRef中的每个元素(例如,通过使用CFDictionaryGetIndex(CFIndex index);)。我想简化它,这样我就不必每次都写那个函数调用了。我想为CFDictionaryRef重载运算符[]。但因为这不是一门课,从我看来,这是不可能的 有人有什么建议吗?没错,不可能在非用户定义的类型上重载运算
有人有什么建议吗?没错,不可能在非用户定义的类型上重载运算符 您可能要做的是将指针包装在类中,并重载类本身上的运算符。由于只能重载类类型上的运算符,因此这是唯一的选项
class CFDictionaryRefWrapper {
public:
CFDictionaryRefWrapper(CFDictionaryRef r) : dref(r) { }
CFDictionaryRef dref;
Type operator[](unsigned int index) {
/* do whatever with dref */
}
};
这还有一个优点,即如果需要,可以自动管理指针的生存期(RAII)。没错,不可能在非用户定义的类型上重载运算符 您可能要做的是将指针包装在类中,并重载类本身上的运算符。由于只能重载类类型上的运算符,因此这是唯一的选项
class CFDictionaryRefWrapper {
public:
CFDictionaryRefWrapper(CFDictionaryRef r) : dref(r) { }
CFDictionaryRef dref;
Type operator[](unsigned int index) {
/* do whatever with dref */
}
};
这还有一个优点,即如果需要,可以自动管理指针的生存期(RAII)。否,对于指针类型或任何其他内置类型,不能重载
[]
运算符。事实上,ptr[N]
已经是*(ptr+N)
的缩写
如果要重载
[]
运算符,则需要定义自己的类来包装指针。否,对于指针类型或任何其他内置类型,不能重载[]
运算符。事实上,ptr[N]
已经是*(ptr+N)
的缩写
如果您想重载
[]
操作符,您需要定义自己的类来包装指针。是的,我想我会将其放入包装器是的,我想我会将其放入包装器中