|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
09.11.2009, 11:31 | #1 |
Новичок
Джуниор
Регистрация: 09.11.2009
Сообщений: 4
|
шаблонные строковые функции
решил написать несколько строковых функций, так чтоб работали со строками разных типов
вот одна из них делает поиск символа в строке, возвращает индекс или -1 если не найден Код:
Код:
error: no instance of function template "str_find_symn_" matches the argument list 1> argument types are: (const char [7], int, int) 1> str_find_symn("asdasd",123,6); то есть как я понял компилятор не преобразовывает 123 к типу char если написать так Код:
теперь вопросы 1. как сделать так чтоб при каждом вызове мне не приходилось преобразовывать типы 2. как проверку на размер типа сделать через условную компиляцию. (при оптимизации он конечно обрубает лишние case, но хотелось бы чтоб на стадии отладки их тоже не было) компидятор Intel 10 Последний раз редактировалось MrKarapuz; 09.11.2009 в 12:53. |
09.11.2009, 12:43 | #2 |
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
Компидятор :)
Можно попробовать сделать TYPE1 и TYPE2 и привести типы в функции. Возможно, придётся использовать dynamic_cast, или какой-нибудь другой каст. |
09.11.2009, 13:02 | #3 |
Новичок
Джуниор
Регистрация: 09.11.2009
Сообщений: 4
|
чтото не понял как к описанию функции каст прикрутить
|
09.11.2009, 13:05 | #4 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
передавать char, а не int?
str_find_symn("asdasd",'\x7B',6); где 7B - 123 в 16-ричной системе |
09.11.2009, 13:13 | #5 |
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
Примерно так:
Код:
|
09.11.2009, 13:19 | #6 |
Новичок
Джуниор
Регистрация: 09.11.2009
Сообщений: 4
|
так не пойдет, тут явно указываеться char
а еслибы было так Код:
ну с 1 вопросом разобрались, теперь хотелось бы узнать как сделать условную компиляцию по размеру типа Последний раз редактировалось Stilet; 09.11.2009 в 14:45. |
09.11.2009, 13:35 | #7 |
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
Мне это не представляется возможным, так как компилятор генерирует 3 экземпляра шаблона, каждый из которых нужно оптимизировать по-своему.
Для большей оптимизации можно сделать в функции int tmp = sizeof TYPE_STR; а остальное сделать на ассемблере. |
09.11.2009, 15:07 | #8 |
Новичок
Джуниор
Регистрация: 09.11.2009
Сообщений: 4
|
то есть чтото типа
#if sizeof TYPE == 1 .... #endif непрокатит? я может неправильно пишу, но размер типа вычисляеться на этапе компиляции. так как же тогда эту проверку сделать через #if? функция и так на асме почти полностью, счас выглядит так Код:
Код:
и откуда беруться 3 шаблона |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Строковые | Маруська | Помощь студентам | 3 | 21.06.2009 17:31 |
Строковые переменные | NightFire | Помощь студентам | 1 | 23.03.2009 06:20 |
Задача на строковые функции в Delphi... | Leprechaun | Помощь студентам | 2 | 24.12.2008 18:01 |
Задачи на Паскале. Строковые процедуры и функции | Мент | Паскаль, Turbo Pascal, PascalABC.NET | 3 | 25.06.2008 13:24 |
Строковые процедуры | Cannibal | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 29.05.2008 12:42 |