しばらくの間、頭を悩ませていることがあります。戻り値の型に基づいて [] 演算子をオーバーロードしようとしています。これが私がする必要があることです:
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_
}
};
このコードはコンパイルされません。それが私の問題です。誰かがこの問題を解決するのを手伝ってくれますか?
PS:たとえば、戻り値の型で通常の関数をオーバーロードする方法を知っています:
int foo ();
string foo ();
このフォーラムで読んだいくつかのトリックを使用しました。この上:
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
}
ありがとうございました。