Название: Переменное количество аргументов констр Отправлено: ssoft от Июль 22, 2013, 14:31 Есть класс (всего лишь пример)
Код
Как бы его реализовать так, чтобы в коде можно было использовать в виде Код
ну или хотя бы в виде Код
Т.е., имеется заранее известное количество аргументов конструктора, равное входящему параметру шаблона _N. Есть решения, если не использовать вариации типа printf( fmt, ... ) и новый стандарт C++11? Название: Re: Переменное количество аргументов конструктора Отправлено: m_ax от Июль 22, 2013, 14:34 С variadic template это можно было бы
Название: Re: Переменное количество аргументов констр Отправлено: Igors от Июль 22, 2013, 14:59 Код
Название: Re: Переменное количество аргументов констр Отправлено: ssoft от Июль 22, 2013, 15:07 Понимаю что это "всего лишь пример" - но как Вы запишете метод (или оператор) векторного произведения "в общем виде"? :). А point4d (часто кватернион) отличается еще больше. Др словами хотя обобщение напрашивается - "сущности" разные, возможно стоит удовлетвориться набором индивидуальных классов. Все частности можно определить специализацией шаблонов. Point - это всего лишь доступный для быстрого понимания пример, где это может быть использовано. ;) Название: Re: Переменное количество аргументов констр Отправлено: _Bers от Июль 22, 2013, 22:26 Нужно что-то типа такого?
http://ideone.com/yiwPkQ Код:
Название: Re: Переменное количество аргументов констр Отправлено: ViTech от Июль 23, 2013, 00:12 Да, variadic template как раз для этой ситуации, жаль их только недавно придумали :).
Параметр N наверняка имеет какое-то ограничение (пусть 10 или 20). Можно сделать конструктор с параметрами по умолчанию, а там сколько придет - столько и обрабатывать. Или наплодить N конструкторов на все случаи жизни, при компиляции выберется нужный. В любом случае руками придется много делать. Еще можно подумать над вариантами со списком типов или какими-нибудь рекурсивными шаблонами. Похоже, без Александреску не обойтись :). Название: Re: Переменное количество аргументов конст Отправлено: ssoft от Июль 23, 2013, 07:01 Да хотелось бы что-то типа такого, как в C++11.
Пока что я использую такой подход Код
// Базовый класс, преобразующийся к _Type[ _N ] Код
// Конкретный класс с дальнейшим уточнением Код
// Для одного аргумента Код
// Для двух аргументов Код
и т.д. для любого количества, пока не надоест писать ;D Тогда в коде можно использовать такую запись Код
Лучше пока ничего не придумал. Может у кого есть более изящное решение? Название: Re: Переменное количество аргументов конст Отправлено: _Bers от Июль 23, 2013, 09:12 Да хотелось бы что-то типа такого, как в C++11. Почему бы тогда ни сделать просто: взять с++11 и не мучаться с велосипедами? Пока что я использую такой подход Если дизайн устраивает - то нормальный способ. Смысли - он простой. Его легко понять. Если при этом это легко использовать - то чего ещё нужно то? А вообще, в рамках с++03 нет вариардиков, поэтому там при любой конструкции будет нечто, что будет обладать тучей конструкторов, или тучей перегрузок, или тем и тем одновременно. Лучше пока ничего не придумал. Может у кого есть более изящное решение? Если хочется высокой гибкости, то в рамках 2003 есть несколько способов имитировать вариардики. Все они обладают разной степенью "сложности". Как вариант вот такой дизайн самодельных кортежей: Код: void Foo(int, double, char) { ... } Вся сложность шаблонов будет инкапсулирована внутри одного лишь my::tuple, который будет отвечать за хранения данных разных типов, и наполнение этим данными других объектов. Название: Re: Переменное количество аргументов конст Отправлено: ssoft от Июль 23, 2013, 09:20 Почему бы тогда ни сделать просто: взять с++11 и не мучаться с велосипедами? В некоторых проектах есть такие требования :-\, старые старые IDE => старые компиляторы. Название: Re: Переменное количество аргументов конст Отправлено: ssoft от Июль 23, 2013, 09:43 Как вариант вот такой дизайн самодельных кортежей: Кортежи - это, конечно, хорошо, но громоздко в использовании. Легче тогда уж так Код
чем Код
Название: Re: Переменное количество аргументов конст Отправлено: ViTech от Июль 23, 2013, 11:42 Пока что я использую такой подход // Для одного аргумента // Для двух аргументов и т.д. для любого количества, пока не надоест писать ;D В бусте и Александреску так и делают в различной степени тяжести :). Если ничего, кроме инициализации массива не надо, то похоже это и будет оптимальным вариантом. Или не городить огород и таки писать в коде лишнюю строчку: Код
А вообще в С++11 можно вот так делать :): Код
Название: Re: Переменное количество аргументов конст Отправлено: ViTech от Июль 23, 2013, 13:17 старые старые IDE => старые компиляторы. Если это Visual Studio, то, начиная с VS 2010, можно использовать компиляторы из других SDK. Visual Studio Platform Toolset (http://msdn.microsoft.com/en-us/library/vstudio/ff770576(v=vs.100).aspx). |