![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| georain |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 28.11.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
Для избежания копирования объектов в функциях пересылки, вместе с возможностью передать все возможные типы используется примерно следующий код:
Как сделать тоже самое для вариативного шаблона?
|
||||
|
|||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
а разве такое бывает? Там где надо несколько вариантов шаблона с разными параметрами, используют множество объявлений этих шаблонов (с одним параметром, двумя, тремя,...).
|
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
По-моему, никак. Я бы просто передавал кучу variant-ов в func(...).
Добавлено через 30 секунд Хотя нет. Я бы вообще такого не стал делать. -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| georain |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 28.11.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
В новом стандарте этого не потребуется, будут вариативные шаблоны (с переменным числом параметров). Но вот я тут немного ступил, проблема не в вариативном шаблоне, а в концепции функции пересылки. Мой пример работает только если типы параметров заранее известны (кстати вопрос всё равно остается открытый, как к набору параметров добавить ссылочный тип, с учетом того, что в наборе уже могут быть ссылки). Конкретно моя проблема пришла к следующей, есть:
Все отлично, пока не попытаться передать ссылку, т.е. если требуется вызвать например internal(Class & cl). В Sutter 2002, 10.6, где обсуждаются функции пересылки этот вопрос почему-то не поднимался. А у Александреску проблема решается как в примере в первом после, но там заранее известны типы аргументов. Но чаще они не известны. Больше я пока ничего не нашел. Это сообщение отредактировал(а) georain - 18.1.2010, 17:05 |
||||
|
|||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
глубоко в этом вопросе не разбирался, но уж больно часто r-value references упоминаются в связи с "perfect forwarding", которое, если я не ошибаюсь, как раз и описывает эту проблему
-------------------- qqq |
|||
|
||||
| georain |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 28.11.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
Спасибо! "Perfect forwarding" в самом деле описывает и решает эту проблему, и даже больше! Теперь в новом стандарте можно будет писать (в gcc-4.4 уже можно) так:
и так
Это сообщение отредактировал(а) georain - 19.1.2010, 13:12 |
||||||
|
|||||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |