В этом посте я поговорю о шаблонах с переменным числом параметров. В качестве примера будет приведена простейшая реализация класса tuple. Также я расскажу о распаковке tuple'а и подстановки, хранимых там значений в качестве аргументов функции. И напоследок приведу пример использования вышеописанных техник для реализации отложенного выполнения функции, которое может быть использовано, например, в качестве аналога finally блоков в других языках.
Читать полностью »
Метка «tuple»
Variadic templates. Tuples, unpacking and more
2014-06-29 в 17:30, admin, рубрики: c++, deferred, templates, tuple, метки: deferred, templates, tupleОсобенности реализации кортежей на c++
2013-05-09 в 5:28, admin, рубрики: c++, c++11, tuple, variadic templates, метки: c++11, tuple, variadic templates Под впечатлением от прочтения замечательной статьи о Variadic Templates
от уважаемого FlexFerrum решил поупражняться в метапрограммировании и написать свою реализацию структуры данных, называемой Tuple
(Кортеж), с использованием шаблонов с переменным количеством аргументов. Для тех кто не знаком, кортеж — структура данных, которая хранит в себе одновременно данные различных типов. У нас же в данном конкретном случае это будет шаблонный класс, который хранит в себе данные тех типов, которые были переданы ему как шаблонные параметры (с учетом порядка).
Предполагается что читатель уже ознакомлен с вышеуказанной статьей, при описании процесса разработки я буду отталкиваться от нее.
Читать полностью »
Шаблоны с переменным количеством аргументов на примере обертки для Lua
2013-01-14 в 10:44, admin, рубрики: c++, c++11, Lua, templates, tuple, ооп, метки: c++, c++11, lua, templates, tupleПонадобилось мне прикрутить Lua к проекту на C++. Писать обертки в ручную — лень (слишком много писать), готовые не подходили по тем или иным причинам. Решил написать свою. А потому задался вопросом, как максимально упростить интерфейс? От одной только мысли об этом в голову лезли жутчайшие конструкции из шаблонов. Так оно в последствии и оказалось, но гораздо проще, чем представлялось.
В C++11 появились шаблоны с переменным числом аргументов, это позволяет писать шаблонные функции/классы так, как в C++03 было невозможно вовсе. Такие шаблоны сильно упрощают задачу.
Первым делом понадобилось написать обертку над простейшими действиями с интерпретатором (можно было бы обойтись простыми вызовами к C API Lua, но держать в памяти кучу индексов различных значений в стеке мне не хочется. Поэтому я обернул их в несколько функций, которые помимо того, что избавляют от необходимости передавать в каждую функцию указатель на состояние интерпретатора, практически не требуют индексов, так как они имеют значения по умолчанию.
В итоге хотелось увидеть интерфейс близкий к следующему:
lua.export_function(some_function);
Кортежи объектов в Java и их коллекции
2012-05-21 в 9:04, admin, рубрики: java, tuple, Песочница, метки: tuple Достаточно часто на практике возникает необходимость воспользоваться такими конструкциями как «пара» (Pair<First, Second>
), менее часто «тринарными» объектами (Triplet<First, Second, Third>
) и более длинными цепочками ассоциированных объектов. В связи с чем всегда удивлялся, почему в JDK (в java.lang.*
или java.util.*
) до настоящего момента нет стандартной Pair<First, Second>
или более длинных конструкций. Думаю многие программисты практикующие на Java имеют свою реализацию «пары». Не исключением являюсь и я.
И вот в очередной раз наткнувшись на необходимость работать с большим количеством различных кортежей, решил взяться за эту проблему системно. Придумал название проекту, определил цели и после экспериментов, занявших некоторое время, выложил код ( git://github.com/telesik/rumba.git ).
Чего хотелось достичь:
- Необходима удобная конструкция (назовем ее кортеж) для ассоциации нескольких объектов, типы которых определялись бы из позиции в полученном кортеже;
- Кортеж должен быть неограниченным по длине и типу;
- Типы элементов должны быть относительно контролируемым (как минимум ограничен дженериками);
- Описание структуры кортежа должно быть простым;