Форум программистов, компьютерный форум CyberForum.ru

вопрос на засыпку, возможно ли? - C++

Восстановить пароль Регистрация
 
LeX
134 / 134 / 31
Регистрация: 30.06.2010
Сообщений: 537
23.03.2011, 17:10     вопрос на засыпку, возможно ли? #1
возможно ли каким либо образом перегрузить оператор [] в собственном классе что бы были возможны следующие конструкции:

C++
1
2
3
4
5
MyClass v;//или MyClass v[<размер>];
v[10]=3;
v[4]=35.6;
v[4.5]="sdfas";
v["dfg"]=432;
то есть что бы индекс был любого типа и значение элемента такого массива тоже было любого типа?

я как то поэкспериментировал с указателем void*(в реализации), получилось следующее:
C++
1
2
3
4
5
6
v["cg"]="buba";
v[1]=(void*)2;//тут хотелось бы без явного указания void*
//без него ругается что не может привести int к void*
v[2]="mars";
v["gr"]=(void*)4;
printf("%s\n%d\n%s\n%d", v["cg"], v[1], v[2], v["gr"]);
вывод работает. все нормально. как избавится от void*? перегрузкой оператора =?

оператор [] возвращает указатель на void* поле, куда записывается значение. строки проходят, числа-нет
а числа типа float и double вообще не удается привести к void*(ну и черт с ними)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.03.2011, 17:10     вопрос на засыпку, возможно ли?
Посмотрите здесь:

C++ Возможно ли так ?
Возможно ли это на с++? C++
C++ Возможно ли так?)
C++ возможно ли?
C++ Возможно-ли упростить код?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
LeX
134 / 134 / 31
Регистрация: 30.06.2010
Сообщений: 537
23.03.2011, 17:18  [ТС]     вопрос на засыпку, возможно ли? #2
Saiberg, ладно, приведите объявление перегрузок в классе(реализую уж сам), что бы можно было реализовать:
C++
1
2
3
v["fsdf"]=1;
v["fd"]=345.567;
v["as"]="rgsdf";
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
23.03.2011, 17:27     вопрос на засыпку, возможно ли? #3
LeX BB, возможно, если тип индекса массива и тип элемента массива будет некоторого класса Variant, который, в свою очередь, может хранить значения различных типов. Реализуется все это через объединение (union) переменных различных типов и тега, который будет представлять информацию о том, переменная какого типа в данный момент хранится в объекте типа Variant.
Пример класса variant, который может хранить значения типа double и char: http://www.cyberforum.ru/cpp-beginne...ml#post1368871. Можешь взять его и расширить под свои нужды.
Если не секрет, зачем подобные извращения понадобились?
LeX
134 / 134 / 31
Регистрация: 30.06.2010
Сообщений: 537
23.03.2011, 17:34  [ТС]     вопрос на засыпку, возможно ли? #4
Nameless One, спасибо, попробую поработать с union
ну такради интереса, получится, нет
KuKu
 Аватар для KuKu
1538 / 1016 / 69
Регистрация: 17.04.2009
Сообщений: 2,946
23.03.2011, 17:52     вопрос на засыпку, возможно ли? #5
C++
1
2
3
4
5
6
7
8
    int operator[](int i)
    {
        return(i);   
    }
    const char* operator[](const char* b)
    {
        return(b);
    }
А перегрузка оператора то не айс ? или мы не ищем легких путей ...

Добавлено через 2 минуты
а .. понял в чем подвох
Yandex
Объявления
23.03.2011, 17:52     вопрос на засыпку, возможно ли?
Ответ Создать тему
Опции темы

Текущее время: 16:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru