У меня есть класс Foo
, который инкапсулирует доступ к вектору и обеспечивает доступ к нему через оператора индексного:Как упростить использование перегруженного оператора индекса с помощью указателя?
typedef int* IntPtr;
class Foo {
std::vector<IntPtr> bars;
IntPtr& operator[](size_t idx) {
return bars[idx];
}
};
В классе Bar
я хочу использовать Foo
. Хотя решение 1 работает, это довольно неудобно. Я предпочел бы что-то подобное решение 2. Очевидно, что вызов метода (даже если он возвращает именующее выражение) не может быть назначено что-то, хотя вызов метода больше ничего не делать, чем решение 1.
class Bar {
Foo *foo; //some initialization
IntPtr helper(size_t idx) {
return (*foo)[idx];
}
void barfoo() {
size_t baz = 1;
IntPtr qux;
//solution 1
qux = (*foo)[baz]; //works
(*foo)[baz] = &1; //works
//solution 2
qux = helper(baz); //works
helper(baz) = &1; //does not work: "expression is not assignable"
}
};
Вопрос: Как я могу упростить использование перегруженного оператора индекса?
РЕДАКТИРОВАТЬ: Измененный используемый тип, чтобы от int
к int*
. Извините, я прищурился при создании примера.
Я предполагаю, что проблема связана с извращенным int*&
.
[Работы для меня] (http://ideone.com/cIfszt) (как только я исправить доступность 'Foo :: оператор []'). Вы, безусловно, можете назначить ссылку * lvalue *, возвращаемую функцией. Вы уверены, что ошибка исходит из этого кода? –
если хелпер возвращает ссылку на ваше решение 2 работает – Drax
Какой компилятор вы используете? Потому что эта строка должна работать ... – cmaster