HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Технические вопросы > с++: опять запутался в трёх соснах.
Страницы (3): « 1 2 [3]   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
ComradeAndrew
Житель форума

Дата регистрации: Aug 2014
Проживает: Дубай
Сообщений: 510
Возраст: 27

Рейтинг



Цитата:
thambs писал:
А можешь пояснить (или лучше кинуть статьёй) как вот эта распаковка работает?

Ну я как правило все ответы нахожу на stackoverflow.com и en.cppreference.com.
В данном случае это все написано тут и тут.

Если коротко, то распаковка варьируемых аргументов может происходить только в конструкции list-initializer. В моем примере я использую лямда функцию в которую распаковываются аргументы и она ничего не возвращает, поэтому и дописываю 0 в список инициализации, через запятую. И получаю такую конструкцию:
C++ Source Code:
{ (add(args), 0)... } // ... - для распаковки

Соответственно я эту конструкцию должен использовать только там, где применяется list-initializer. Например как аргумент для std::initializer_list.
Это может быть и объявление массива, вроде int a[] = { args... };
Ну я думаю суть ты понял.

Сообщить модератору | | IP: Записан
Сообщение: 157178

Старое сообщение 25-07-2016 06:14
- За что?
thambs
мразь конченная

Дата регистрации: Mar 2006
Проживает: -
Сообщений: 6417

Рейтинг



ComradeAndrew
Спасибо, вот что, собственно, я искал:

C++ Source Code:
for (const auto& arg : {Args...})

Совсем позабыл по циклы по массивам. Надеюсь, что конпелятор такой цикл оптимизирует, и всё будет так же быстро как в фортране...

__________________
http://www.moddb.com/mods/monorail-quest

Сообщить модератору | | IP: Записан
Сообщение: 157183

Старое сообщение 25-07-2016 08:37
- За что?
thambs
мразь конченная

Дата регистрации: Mar 2006
Проживает: -
Сообщений: 6417

Рейтинг



Вопрос про шаблоны. Пусть есть шаблон функции параметризуемый параметром:

C++ Source Code:
enum ptype {TYPE1, TYPE2, TYPE3};
template<ptype T> void foo(void);

Очень хочется сделать конструкцию в стиле
C++ Source Code:
for(const auto T: {TYPE1, TYPE2, TYPE3})
  foo<T>();

что бы оно при компиляции развернулось в
C++ Source Code:
foo<TYPE1>();
foo<TYPE2>();
foo<TYPE3>();

Как такое можно организовать?

__________________
http://www.moddb.com/mods/monorail-quest

Сообщить модератору | | IP: Записан
Сообщение: 158130

Старое сообщение 16-08-2016 03:08
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34523
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


thambs
Например, вот так:

C++ Source Code:
1
enum ptype { TYPE1, TYPE2, TYPE3, TYPE_END };
2
template<ptype T> void foo(void);
3
 
4
template<ptype T> void until_ptype_end()
5
{
6
  foo<T>();
7
  until_ptype_end<static_cast<ptype>(T+1)>();
8
}
9
template<> void until_ptype_end<TYPE_END>() {}

И вызываем вот так:
C++ Source Code:
until_ptype_end<TYPE1>();

Этот код корректно работает и со специализациями foo. Но есть ограничение: элементы енума должны быть последовательными (т.к. доступ к следующему вычисляется как предыдущий + 1).

__________________

Сообщить модератору | | IP: Записан
Сообщение: 158135

Старое сообщение 16-08-2016 08:02
-
thambs
мразь конченная

Дата регистрации: Mar 2006
Проживает: -
Сообщений: 6417

Рейтинг



Блин, или я идиот, или одно из двух... Сделал две реализации -- одну на шаблонах, а другую на статичных массивах с указателями на функции. Казалось бы, что шаблоны развернутся прямо в нужные функции, и это будет быстрее чем обращаться через обёртку -- но нет, через обёртку процентов на 10% быстрее. wat?

__________________
http://www.moddb.com/mods/monorail-quest

Сообщить модератору | | IP: Записан
Сообщение: 158194

Старое сообщение 17-08-2016 21:20
- За что?
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 17:04. Новая тема    Ответить
Страницы (3): « 1 2 [3]   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Технические вопросы > с++: опять запутался в трёх соснах.
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2024