Перегрузка оператора индексации
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.168] |
|
|
Перегрузка оператора индексации
|
Сообщ.
#1
,
|
|
|
|
Хочу перегрузить оператор индексации так, чтоб работало все сродни индексаторам в c#. Возможно ли это? Допустим, есть класс, у него есть член-массив, при помощи оператора индексации можно обращаться к элементам этого массива, но так, чтобы индексирование осуществлялось через строку:
![]() ![]() struct struc { LPCSTR name } class Class { struc** mStruct struc* operator[](LPCSTR name) { for (int i = 0; mStruct[i]!=0; i++) { if(!strcmp(name,mStruct[i]->name)) return mStruct[i]; } } void mSomeMethod() { //теперь можно сделать,допустим, так mStruct["фыва"] = 0; } } |
|
Сообщ.
#2
,
|
|
|
|
Запросто. А в чём проблема-то? Принимай const char* параметром, и реализуй, как полагается.
|
|
Сообщ.
#3
,
|
|
|
|
извиняюсь за ошибки, которые могут встретиться в коде
Добавлено странно, пробовал так уже... Добавлено выражение должно относиться к целочисленному типу или типу перечисления без области видимости - гласит visual studio Добавлено при том что сама перегрузка проходит "тест" |
|
Сообщ.
#4
,
|
|
|
|
Цитата Wnplx @ Это ты читал о стандартом operator[]. Свой собственный можешь перегружать, как хочешь. выражение должно относиться к целочисленному типу или типу перечисления без области видимости - гласит visual studio |
|
Сообщ.
#5
,
|
|
|
|
ну вот - я попробовал сделать точно так же, как в моем примере - и все равно та же ошибка... как правильно?
|
|
Сообщ.
#6
,
|
|
|
|
Правильно - исправить ошибку. Не спрашивай как, никто не ответит. Но если попробовать потелепатировать, у тебя юникод-приложение.
Добавлено Ага. Ты перегрузил operator[] для class Class, а вызываешь для struc**. Естественно. |
|
Сообщ.
#7
,
|
|
|
|
Цитата Wnplx @ Хочу перегрузить оператор индексации так, чтоб работало все сродни индексаторам в c# А я хочу, чтобы шарповские дженерики стали плюсовыми шаблонами. Не надо писать на одном языке как на другом. Вы даже не представляете, каким ружьём, направленным вам в яйца, являются эти ваши struc*, struc** и LPCSTR. И начните уже изучать язык по книжке, а не по форуму. |
|
Сообщ.
#8
,
|
|
|
|
Цитата MyNameIsIgor @ Вы даже не представляете, каким ружьём, направленным вам в яйца, являются эти ваши struc*, struc** и LPCSTR. Да? Насколько все плохо? |
|
Сообщ.
#9
,
|
|
|
|
Не настолько смертельно, но да, без хорошего понимания указателей лучшие с ними не связываться. В C/C++ указатели - далеко не то, что ссылки в шарпе. Во-первых, нет сборки мусора, во-вторых, указывать они могут отнюдь не только на объекты в динамической памяти.
|
|
Сообщ.
#10
,
|
|
|
|
Цитата Wnplx @ Насколько все плохо? Это опасно - неосторожное движение приведёт к неприятным последствиям. |
|
Сообщ.
#11
,
|
|
|
|
ааа вот вы про что... все в порядке, я очень внимателен
|