代码之家  ›  专栏  ›  技术社区  ›  A. Rex

C++:从类内访问运算符[]的便捷方法?

  •  51
  • A. Rex  · 技术社区  · 16 年前

    我有一个重载的C++类 operator[] ,数组下标/括号运算符。这在课堂之外非常方便,我可以在那里写作 foo[bar

    我知道我能写 operator[](bar) this->operator[](bar) this[bar] this->[bar] 或者类似的好东西?

    6 回复  |  直到 5 年前
        1
  •  70
  •   Evan Teran    16 年前
    (*this)[bar];
    

        2
  •  7
  •   Mr Fooz    12 年前

    使用

    (*this)[bar]
    

    operator[]

    bar 是整数(或可以自动转换为1), this[bar] this 指针作为数组并对其进行索引 如果位于数组中,这将导致未定义的行为。如果 酒吧

        3
  •  4
  •   Robert Gould    16 年前

    class Widget
    {
        Widget&     self;
    public:
        Widget() :self(*this)
        {}
    
        void operator[](int)
        {
            printf("hello");
        }
    
        void test()
        {
            //scripting like sugar
            //you pay the price of an extra reference per class though
            self[1]; 
        }
    };
    
    
    int main(int argc, char* argv[])
    {
        Widget w;
        w[1];
        w.test();
        return 0;
    }
    

    此外,如果你想免费做这件事,而不支付参考费用, 是一些邪恶教派的追随者,致力于让程序员遭受你可以做的痛苦:

    #define self (*this)
    

        4
  •  3
  •   Michael Kristofik    16 年前

    替代方案 (*this)[bar] 是使用一个命名成员函数,该函数执行以下工作 operator[] 。问问自己,用自己的公共接口来实现你的类是否真的有意义。如果没有,我建议编写一个单独的(受保护的或私有的)成员函数来完成这项工作,然后 操作员[]

        5
  •  2
  •   user3199814    11 年前
     operator[](bar) 
    

    这也应该奏效。它对我有效!

        6
  •  1
  •   Drew Hall    16 年前

    ,但这可能不是很大的改善。..