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

非类类型的重载运算符[] 我想知道是否有一种方法来为C++中的非类类型重载运算符[]。,c++,operator-overloading,C++,Operator Overloading,基本上,有一种数据类型是指针(来自CoreFoundation的CFDictionaryRef)。但它不是一个类(我知道允许对特定类重载运算符[])。我知道如何访问CFDictionaryRef中的每个元素(例如,通过使用CFDictionaryGetIndex(CFIndex index);)。我想简化它,这样我就不必每次都写那个函数调用了。我想为CFDictionaryRef重载运算符[]。但因为这不是一门课,从我看来,这是不可能的 有人有什么建议吗?没错,不可能在非用户定义的类型上重载运算

基本上,有一种数据类型是指针(来自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)
的缩写


如果您想重载
[]
操作符,您需要定义自己的类来包装指针。

是的,我想我会将其放入包装器是的,我想我会将其放入包装器中