| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Как работать с массивом любого типа? |
| Автор: Quadruple 31.3.2005, 10:30 | ||
Мне надо в функцию передать массив любой из следующих типов:
Внутри функции массив будет изменен оператором =, а также применены операторы > и <. Как сделать такую функцию? Или такого сделать нельзя? |
| Автор: chipset 31.3.2005, 10:32 |
| Передавай массив по указателю. |
| Автор: Quadruple 31.3.2005, 10:34 |
| chipset void* ? А мне компилер пишет что array unknow or ZERO, если сделать так: array[0]. |
| Автор: chipset 31.3.2005, 10:40 | ||||
|
| Автор: azesmcar 31.3.2005, 10:43 | ||
Добавлено @ 10:45 template тебя чем не устраивает? |
| Автор: Quadruple 31.3.2005, 11:01 | ||
| azesmcar Чето у меня неполучается заюзать template. Что мне надо, уточняю:
array может быть любого типа из short, int, float, double. |
| Автор: chipset 31.3.2005, 11:03 | ||
|
| Автор: Fire-Plug 31.3.2005, 11:24 | ||||||
| Quadruple Без template не обойтись. Тип void не поможет, т.к. чтобы доступиться до скажем элемента array[1] нужно правильно сместить указатель. Как получить смещение для типа void, кто-то знает? Поэтому нужно: 1) Принять решение, предалагаемое azesmcar, только слегка изменить его:
2) Поработать вместо компилера и написать перегруженные ф-ции для всех типов. Здесь нам поможет любимая китайская технология C&P (copy & paste)
Сразу предупреждаю, что у компайлера будут ambiguous-проблемы, т.е. проблемы неопределенности при выборе перегруженной ф-ции по её аргументу для типов short и int, а также float и double, т.к. по умолчанию имеет место продвижение типа переменной short ==> int, float ==> double. Ну, попробуй. Попытка не пытка Добавлено @ 11:32
Во блин, китайская технология меня уже подвела! Хотел сказать, что будут проблемы неопределенности при выборе перегруженной ф-ции по её аргументу для типов short и float из-за возможности автоматического приведения аргументов этого типа к типу int и double соответственно. |
| Автор: azesmcar 31.3.2005, 11:49 | ||||
Ну и что, так не работает?
Добавлено @ 11:52
А смысл? за тебя это темплейт сделает..кстати насчет темплейта...читал у страуструпа что есть возможность для указателей сделать так чтоб темплейт создавал только одну копию функции с параметром void* и автоматически делал кастинг...Только не помню как это делалось, а книги под рукой нету...тоже неплохой вариант..и памяти меньше занимает и код меньше получится... |
| Автор: Quadruple 31.3.2005, 13:21 |
| azesmcar с template там не все так просто, копилир ругается Cannot use template... Вот идея chipset с подстановкой типа интересна, определяю тип через typeid, только неудается мне его подставить. |
| Автор: jorkug 31.3.2005, 14:35 | ||
Ты вообще в какой среде пишешь? |
| Автор: Quadruple 31.3.2005, 15:17 |
| jorkug Билдер. Я просто template как-то вот непользуюсь пока Вобщем все решил, всем спасибо |
| Автор: Fire-Plug 1.4.2005, 03:40 | ||||||
Ну, хочется быть как все - приличным участником форума, не язвить, но разве позволят... azesmcar, ведь сказано немного выше в п. 1) - напиши template-ф-цию, а если по какой-то причине у тебя не получается, то придется самому за компилер поработать и написать соотв. перегруженные версии. Что, некий фильтр отсеял утверждение из п 1) или, быть может, стилистика изложения приводит к ложным выводам? Вот так и работает механизм возникновения офф-топов.
Оператор typeid возвращает ссылку на объект type_info:
к-рый содержит строку с именем типа. С моей точки зрения, это обстоятельство не продвигает в направлении требуемого решения ни на йоту. Как на основе строки с именем типа сделать обощенный(generic) вариант кода? Ведь кастать придется каждую операцию! Есть ещё мнения? |
| Автор: azesmcar 1.4.2005, 07:45 | ||||
Fire-Plug
Ну и где ты это написал? что то не вижу...ты предлагаешь или то или то...поскольку я тебя не знаю считаю что ты человек который предлагает осмысленные вещи...и коли уж предложил вместо темплейт написать самому перегруженные функции то в этом нашел какой то смысл который не сумел найти я. А насчет того что если уж вдруг не получиться у тебя ни слова... Лично я если что то не работает пытаюсь понять почему не работает а не искать других решений. Quadruple Может в настройках компилера отключено...где то и в каком то компиляторе попалась мне такая птичка...у тебя что стоит? |
| Автор: np9mi7 1.4.2005, 11:56 | ||
заработает, поверь! К тому же будет работать быстрее чем с void (на этапе компиляции типы известны) + вообще не представляю как ты собрался это делать с void, ведь полюбому придеться от - cast ить к типу который тебе нужен... Как хотел то? |
| Автор: DerLaM 1.4.2005, 12:19 |
| Всем привет! У меня вопрос не по теме! Скажите пожалуйста реально ли изучить с++ (с нуля) за 2 месяца, для того чтобы хотябы научиться делать простую записную книжку? P.S. Простите за флуд но моя скорость (10 кб/сек) не позволяет найти нужную тему |