| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > variadic templates и "разворот" в типы посредники |
| Автор: boostcoder 10.1.2012, 22:23 | ||||||||||
| всем привет. к примеру, имеется у нас следующая функция:
используем мы ее как обычно:
тут проблем нет. теперь давайте представим, что эта функция на самом деле декларирована так:
а мы хотим ее использовать так:
т.е. проблема в том, что функция не моя, а мне нужно под нее подстраиваться. вторая проблема в том, что у функции каждый аргумент (ArgWrapper) получает два значения которые описывают один аргумент. в общем, последний пример, для ясности должен компилятором генерироваться так:
не знаю как еще описать.. |
| Автор: mes 11.1.2012, 15:35 |
| проблема пройтись по списку ? рекурсия в помощь.. как обернуть отдельный тип полагаю вопросов не возникает.. |
| Автор: boostcoder 11.1.2012, 18:41 | ||||
оказалось все сильно проще. просто нужно больше времени уделять чтению доки.
http://liveworkspace.org/code/bcd126457d6b99620dddac6e8f4fe874 я не знал что при "развороте" вариадика, может так же развернуться все выражение в котором вариадик используется это многое упрощает и в моих прошлых задачах! всем спасибо. зы mes, не могли бы Вы пояснить такой момент. почему злополучную строку я не могу записать так?: invoker::func({typeid(Args).name(), &args}...); вроде как это валидная запись.. но компилятор говорит:
|
| Автор: boostcoder 11.1.2012, 21:19 | ||||
| mes, по правде говоря, мне подсказали это решение. но сейчас, полазав по гуглу, я действительно нашел упоминание (вскользь) о такой возможности: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2080.pdf глава "2.5 Is the Meta-Operator '...' Necessary?" http://www.generic-programming.org/~dgregor/cpp/variadic-templates.html в самом начале, в примере:
все же мало пока что доки по возможностям нового стандарта, и еще меньше людей, которые уже достаточно плотно используют С++11... Добавлено через 9 минут и 42 секунды еще тут большой кусок доки с примерами: http://publib.boulder.ibm.com/infocenter/lnxpcomp/v111v131/index.jsp?topic=%2Fcom.ibm.xlcpp111.linux.doc%2Flanguage_ref%2Fvariadic_templates.html Добавлено через 13 минут и 8 секунд и здесь, в первом ответе используется такой же трюк: http://stackoverflow.com/questions/7381805/c-c11-switch-statement-for-variadic-templates
|
| Автор: mes 12.1.2012, 14:48 |
| boostcoder, спасибо, никогда раньше не приходилось натыкаться, классная возможность! |
| Автор: boostcoder 12.1.2012, 19:23 |
| та же самая проблема. уже третий день. думал только у меня. ну....или...модеры наказали ;) |
| Автор: spyswamp 12.1.2012, 20:40 |
| Оффтоп: +1. Репутацию даже смотреть сейчас нельзя. |
| Автор: boostcoder 13.1.2012, 08:04 |
| карму починили. |
| Автор: boostcoder 13.1.2012, 09:52 | ||
| гы. и на википедии появился этот пример заговор какой-то, чесслово.. http://en.wikipedia.org/wiki/Variadic_templates Добавлено @ 09:54
да и вообще, всю страницу по С++11 сильно обновили: http://en.wikipedia.org/wiki/C%2B%2B11 |