在返回类型上重载operator []

1 c++

从某种程度上说,有些事情让我的大脑感到不安:我试图根据返回类型重载[]运算符.这是我需要做的:

class A {

private:
    double* data_;
    int N_;
public:
    A (N=0):N_(N){
        data_ = new double[N];
    }
    ~A {delete[] data_;}

    double operator[] (const int i) {
        return data_[i];
    }

    double* operator[] (const int i) {
        return &data[i]; // for example; in fact here i need to return some block of data_ 
    }
};
Run Code Online (Sandbox Code Playgroud)

这段代码不会编译; 那是我的问题.有人可以帮我解决这个问题吗?

PS:我知道如何在返回类型上重载正常函数,例如:

int foo ();
string foo ();
Run Code Online (Sandbox Code Playgroud)

我使用了一些我在这个论坛中读到的技巧.通过这种方式:

struct func {
    operator string() { return "1";}
    operator int() { return 2; }
};

int main( ) {
    int x    = func(); // calls int version
    string y = func(); // calls string version
    double d = func(); // calls int version
    cout << func() << endl; // calls int version
    func(); // calls neither
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

use*_*016 14

两个方法重载必须具有不同的签名.返回类型不是方法签名的一部分.

  • +1; C++ 11引用,§1.3.20:"***签名**<类成员函数>:名称,参数类型列表,函数所属的类,cv-qualifiers(如果有),以及ref-限定符(如果有的话)*" (2认同)