【问题标题】:C++ using square brackets with pointer to instanceC++ 使用方括号和指向实例的指针
【发布时间】:2012-06-19 15:30:22
【问题描述】:

我创建了一个单例类,它使用GetInstance() 方法来获取实例地址(指针)。 在类内部,我有一个 unsigned long int 数组,我为它创建了operator [](直接访问数组)。 我如何使用从GetInstance 获得的指针来使用[] operator? 我试过了:

class risc { // singleton
protected:
unsigned long registers[8];
static risc* _instance;
risc() {
    for (int i=0;i<8;i++) {
        registers[i]=0;};
    }
public:
unsigned long   operator   [](int i) const  {return registers[i];}; // get []
unsigned long & operator   [](int i)        {return registers[i];}; // set []
static risc* getInstance() { // constructor
        if (_instance==NULL) {
            _instance=new risc();
        }
        return _instance;
    }
};

risc* Risc=getInstance();
*Risc[X]=...

但它不起作用......有没有办法我可以使用括号直接使用类指针访问数组?

谢谢!

【问题讨论】:

  • 为什么要指针? static risc&amp; getInstance() 也可以。

标签: c++ class pointers operand


【解决方案1】:

试试这个:

(*Risc)[X]=...

方括号运算符优先于指针取消引用运算符。也可以按名称调用运算符,尽管这会导致语法相当笨拙:

Risc->operator[](x) = ...

【讨论】:

  • +1 表示第二个提示,明确的形式。你应该说这也适用于“this”关键字。
【解决方案2】:

您可以使用参考:

risc &Risc = *getInstance();
Risc[X] = ...

如果你修改了指针,你可能会遇到问题,但在这种情况下不应该发生这种情况,因为它是一个单例。

更多详情请见this answer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 2015-02-13
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多