如何为get和set重载括号运算符?

pok*_*che -1 c++

我试图使用括号运算符重载getter和setter.当我尝试使用时

double& my_vector::operator()(size_t index){
    return array[index]
}
Run Code Online (Sandbox Code Playgroud)

这个单个运算符重载适用于这两种情况:

例如:my_vector(1) = 4.01;&double x = my_vector(1);

但是现在我想让getter as const和setter,non-const因为我将在另一个const函数中使用const getter.我做

得到的 double& my_vector::operator()(size_t index) const;

二传手 double& my_vector::operator()(size_t index);

我得到错误:只有它们的返回类型不同的函数不能重载.

我想我知道错误在说什么,但我不确定如何纠正它.

Mic*_*son 5

这是一个完整的例子,展示了它的工作原理; (你可以在这里运行http://ideone.com/kO0Rf1)

#include <iostream>
using namespace std;

class my_vector {
public:
    double data[6] = {1,2,3,4,5,6};
    double & operator()(size_t i) {
        std::cout<<"Calling non-const ()"<<std::endl;
        return data[i];
    }
    double operator()(size_t i) const {
        std::cout<<"Calling const ()"<<std::endl;
        return data[i];
    }
};

void withConst(const my_vector &v) {
    double vv = v(0);
    std::cout<<"v(0) = "<<vv<<std::endl;
    // v(0) = 4.0; // Does not compile
}

void withNonConst(my_vector &v) {
    v(0) = 4.0;
    double vv = v(0);
    std::cout<<"v(0) = "<<vv<<std::endl;
}

int main() {
    my_vector vec;
    withConst(vec);
    withNonConst(vec);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)