|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
03.02.2013, 23:29 | #11 |
Пользователь
Регистрация: 02.02.2013
Сообщений: 44
|
|
03.02.2013, 23:37 | #12 |
С++
Форумчанин
Регистрация: 22.09.2008
Сообщений: 791
|
Ну, тогда вспоминайте про variadic templates и вперед)
Форматируйте код, будьте людьми.
|
03.02.2013, 23:45 | #13 |
Пользователь
Регистрация: 02.02.2013
Сообщений: 44
|
лучше завтра сделаю, на свежую голову
а про variadic впервые слышу... |
03.02.2013, 23:47 | #14 | |
С++
Форумчанин
Регистрация: 22.09.2008
Сообщений: 791
|
Цитата:
Форматируйте код, будьте людьми.
|
|
03.02.2013, 23:52 | #15 | |
Пользователь
Регистрация: 02.02.2013
Сообщений: 44
|
Цитата:
они как то так выглядят? Код:
|
|
04.02.2013, 00:02 | #16 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
да и например ffmpeg это консольное приложение, что ему совсем не мешает быть архиполезным. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
04.02.2013, 00:11 | #17 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
Количество аргументов редко бывает свыше 7 шт. Макконелл в своей книжке вообще не рекомендует. А в 2008 студии нет поддержки вариардиков. И там такую задачу невозможно решить в принципе Зато, если хорошенько подумать, то есть способы как имитировать переменное количество аргументов шаблона, не прибегая к многочисленным перегрузкам. А статический член bool value лучше заменить на enum { value = true }; или enum { value = false }; Потому что: 1. Так удобнее инициализировать константы времени компиляции. 2. Такие вещи являются шаблонами-алгоритмами. И применяются метапрограммировании на шаблоннах. Использование имеет вид: Код:
Ну и если бы я и делал такой валидатор, я б немножко изменил дизайн: enum { is_func = is_callable<F, R(A1, A2, A3)>::value }; Тогда полностью отпадает необходимость в вариардиках. У шаблона только два аргумента: F - объект, который нужно проверить R(A1, A2, A3) - это составной тип данных. Он описывает прототип функции. Принцип действия вот такой: Код:
Код:
1. Он удобен и интуитивен. 2. Его проще реализовать. Не нужны никакие вариардики 3. Именно с такой моделью описания прототипа функции работают всякие бустовские бинды и прочее. Поэтому, можно будет легко подружить с какими нить бустовскими механизмами. А так вообще да, интересно глянуть, на решение этой задачки парнем, который считает, что выучил великий и непобедимый с++) |
|
04.02.2013, 00:22 | #18 |
С++
Форумчанин
Регистрация: 22.09.2008
Сообщений: 791
|
_Bers, спасибо за детальное разъяснение) Да, такой синтаксис, пожалуй, удобнее и интуитивнее, если мы хотим проверить конкретную вызываемую сигнатуру. Я имел в виду проверку именно вызова с такими аргументами, не используя тип возвращаемого значения.
Поясните, почему enum { value = true; } лучше, чем static const bool value = true? Вычисляется тоже во время компиляции, и выглядит интуитивнее, как мне кажется.
Форматируйте код, будьте людьми.
|
04.02.2013, 00:22 | #19 |
Пользователь
Регистрация: 02.02.2013
Сообщений: 44
|
что то на примерах с объяснением я лучше учусь чем читая какие то странные статьи....
|
04.02.2013, 00:33 | #20 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Вот тебе пример-иллюстрация как работают вариардики.
Заодно можно проверить, поддерживает ли твой компилятор эту абалденную фичу 11 стандарта: http://liveworkspace.org/code/4coPq$1 Вот есть функции, а есть функторы. Функторы, это объекты, у которых есть operator(), поэтому внешне они могут вести себя как функции. Например: Код:
Ну и вот, твоя задача сделать такой механизм, который сумеет распознать, является ли сущность функтором, или нет. Причем функтором который работает именно с теми аргументами, которые были указаны. Пример: Код:
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
с чего начиНАТЬ С/С++!!!! | dk118 | Помощь студентам | 0 | 05.12.2012 01:22 |
С чего начинать | leonidsm | Свободное общение | 4 | 06.10.2012 19:37 |
Какой язык лучше всего выбрать после завершения изучения языка Паскаль. | VektorAB | Помощь студентам | 4 | 09.07.2010 07:16 |
С чего начинать? | Shadol | Свободное общение | 6 | 24.11.2009 11:46 |
С++ ЧЕГО НАЧИНАТЬ !!! | geniy | Общие вопросы C/C++ | 12 | 03.09.2007 10:50 |