![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Quadruple |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 4.11.2004 Репутация: нет Всего: нет |
Мне надо в функцию передать массив любой из следующих типов:
Внутри функции массив будет изменен оператором =, а также применены операторы > и <. Как сделать такую функцию? Или такого сделать нельзя? ![]() |
|||
|
||||
chipset |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Передавай массив по указателю.
--------------------
|
|||
|
||||
Quadruple |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 4.11.2004 Репутация: нет Всего: нет |
chipset
void* ? А мне компилер пишет что array unknow or ZERO, если сделать так: array[0]. |
|||
|
||||
chipset |
|
||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
--------------------
|
||||||
|
|||||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Добавлено @ 10:45 template тебя чем не устраивает? |
|||
|
||||
Quadruple |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 4.11.2004 Репутация: нет Всего: нет |
azesmcar
Чето у меня неполучается заюзать template. Что мне надо, уточняю:
array может быть любого типа из short, int, float, double. |
|||
|
||||
chipset |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Это сообщение отредактировал(а) chipset - 31.3.2005, 11:03 --------------------
|
||||
|
|||||
Fire-Plug |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 15.3.2005 Репутация: -1 Всего: 0 |
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 |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Ну и что, так не работает?
Добавлено @ 11:52
А смысл? за тебя это темплейт сделает..кстати насчет темплейта...читал у страуструпа что есть возможность для указателей сделать так чтоб темплейт создавал только одну копию функции с параметром void* и автоматически делал кастинг...Только не помню как это делалось, а книги под рукой нету...тоже неплохой вариант..и памяти меньше занимает и код меньше получится... |
||||
|
|||||
Quadruple |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 4.11.2004 Репутация: нет Всего: нет |
azesmcar
с template там не все так просто, копилир ругается Cannot use template... Вот идея chipset с подстановкой типа интересна, определяю тип через typeid, только неудается мне его подставить. |
|||
|
||||
jorkug |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 21.3.2005 Репутация: нет Всего: 1 |
Ты вообще в какой среде пишешь? |
|||
|
||||
Quadruple |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 4.11.2004 Репутация: нет Всего: нет |
jorkug
Билдер. Я просто template как-то вот непользуюсь пока ![]() Вобщем все решил, всем спасибо ![]() |
|||
|
||||
Fire-Plug |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 15.3.2005 Репутация: -1 Всего: 0 |
Ну, хочется быть как все - приличным участником форума, не язвить, но разве позволят... azesmcar, ведь сказано немного выше в п. 1) - напиши template-ф-цию, а если по какой-то причине у тебя не получается, то придется самому за компилер поработать и написать соотв. перегруженные версии. Что, некий фильтр отсеял утверждение из п 1) или, быть может, стилистика изложения приводит к ложным выводам? Вот так и работает механизм возникновения офф-топов.
Оператор typeid возвращает ссылку на объект type_info:
к-рый содержит строку с именем типа. С моей точки зрения, это обстоятельство не продвигает в направлении требуемого решения ни на йоту. Как на основе строки с именем типа сделать обощенный(generic) вариант кода? Ведь кастать придется каждую операцию! Есть ещё мнения? --------------------
Объясни другому - поймешь сам (Народная примета) |
||||||
|
|||||||
azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Fire-Plug
Ну и где ты это написал? что то не вижу...ты предлагаешь или то или то...поскольку я тебя не знаю считаю что ты человек который предлагает осмысленные вещи...и коли уж предложил вместо темплейт написать самому перегруженные функции то в этом нашел какой то смысл который не сумел найти я. А насчет того что если уж вдруг не получиться у тебя ни слова... Лично я если что то не работает пытаюсь понять почему не работает а не искать других решений. Quadruple Может в настройках компилера отключено...где то и в каком то компиляторе попалась мне такая птичка...у тебя что стоит? |
||||
|
|||||
np9mi7 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 553 Регистрация: 17.8.2003 Где: Volgograd, Russia Репутация: 5 Всего: 10 |
заработает, поверь! К тому же будет работать быстрее чем с void (на этапе компиляции типы известны) + вообще не представляю как ты собрался это делать с void, ведь полюбому придеться от - cast ить к типу который тебе нужен... Как хотел то? |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |