![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
Если char * - это строковое представление числа ( типа char*("123") вместо DWORD(123) ), то можно написать 2 шаблонные функции преобразования аргумента в число:
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
Abyx |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 601 Регистрация: 3.11.2009 Репутация: 1 Всего: 10 |
borisbn, для этого есть lexical_cast
|
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
я и не предлагал писать 8 специализаций ради одной реализации, одной реализации с шаблонами вполне достаточно. |
|||
|
||||
djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
>djamshud, немного проанализировав ваши посты, пришел к умозаключению, что ваш стиль написания кода, называется "Си с классами." прям 90еы..ужос..
Мой стиль - это "скрипты и си с классами, наследованиями, RTTI и шаблонами". А желание пихать шаблоны с бустом куда ни попадя - это симптом (не, ну метапрограммирование - это же так по-европейски, да и вообще как ни крути - просто ###ись), часто говорящий, что человек для решения задачи (и самое главное - выражения своих мыслей) использует немного не тот язык. Диагноз ставить не буду - не доктор:). Добавлено через 1 минуту и 50 секунд >я и не предлагал писать 8 специализаций ради одной реализации, одной реализации с шаблонами вполне достаточно. Хм, ну вот я хоть убей не сображу, как это сделать. Как я понимаю, задача не в lexical_cast'e. -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
вообще-то довольно просто
я не думаю, что это необходимо, но если вдруг очень нужно, чтобы функция работала именно для char* и short (или что-то там еще) то этого тоже довольно легко добиться добавив static assert.
|
||||
|
|||||
djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
azesmcar, эммм... Я думаю, ТС хочет чего-то большего, чем просто распечатать аргументы. В общем нужно узнать, что именно делает его функция.
-------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
||||
|
||||
Abyx |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 601 Регистрация: 3.11.2009 Репутация: 1 Всего: 10 |
без ненужных энумов и бустовских статик ассертов
выдает ошибку
Это сообщение отредактировал(а) Abyx - 20.7.2010, 14:59 |
||||||
|
|||||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
Abyx, я atoi просто так написал, чтобы понятно было в какую сторону смотреть...
и вообще, мой пример может не пригодиться, если у этой функции в качестве char * аргументов не строковое представление чисел, а что-то другое. Согласен со всеми, что без понимания, что должна эта функция делать ( или хотя бы что должны значить аргументы ), помочь ТС-ру сложно. -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
>вывод всего лишь пример одинакового поведения
Не совсем. Вывод - тривиальный пример одинакового поведения с учетом того, что дальнейший обработчик (в вашем примере это std::cout) уже перегружен работать с разными типами. Если совсем чуть-чуть усложнить задачу и предположить, что передаваться будет не null-terminated строка, даже простое распечатывание станет намного веселее. Но даже если не трогать входные параметры, можно придумать тысячу и один вариант нетривиального (одинакового) поведения сабжевой функции. -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Abyx
Да, одно и тоже..конечно подключать boost ради этого не стоит ![]()
можно и как-то так, без создание лишних объектов, правда я вообще не считаю, что это нужно. Одного шаблона достаточно. Добавлено через 4 минуты и 38 секунд djamshud Какое же это тогда одинаковое поведение? либо обработка проходит одинаково, либо нет, тут третьего не надо, в первом случае функция одна, во втором их уже две, так как поведения разные для разных типов.
тогда распечатка для типов char* и short будет разная, а значит и функции будут разные. Это сообщение отредактировал(а) azesmcar - 20.7.2010, 15:05 |
||||
|
|||||
djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
azesmcar, под одинаковым я подразумевал смысловое одинаковое поведение, а не то, что код для каждого аргумента будет один в один независимо от его типа. В общем то в теории перегрузка и в особенности шаблоны как раз и предназначены для этого, но на практике часто проще воспользоваться variant-ом в том или ином виде. Я про свою практику.
-------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
variant предназначен несколько для другого, а именно для рантайм выборки типа..
|
|||
|
||||
djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
mes, с точки зрения конечного результата, разницы может и не быть, когда принято решение о работе с конкретным типом - всего лишь один дополнительный условный переход.
-------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
ну и ? при чем тут переход, когда речь идет о предназначении, т.е. логике работы нежели производительности.. к тому же он не покрывает возможные нужды тс.. так что пока он не выскажется о своей задаче, обсуждать нечего.. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |