![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Functions with Multiple ArgumentsBoost , The Boost C++ Libraries BoostBook Documentation Subset , Chapter 37. Boost.TypeErasure
|
![]() | Note |
---|---|
Добавление |
addable
<>
требует, чтобы типы аргументов были точно такими же. Однако это не распространяется на все виды использования добавок. Например, арифметика указателей берет указатель и целое число и возвращает указатель. Мы можем фиксировать такого рода отношения между несколькими типами, идентифицируя каждый тип, связанный с заполнителем. Мы позволим заполнителю _a
представлять указатель, а заполнителю _b
представлять целое число.
int array[5]; typedef mpl::vector< copy_constructible<_a>, copy_constructible<_b>, typeid_<_a>, addable<_a, _b, _a> > requirements;
Наша новая концепция добавляемый<_a, _b, _a>
содержит правила добавления указателей: _a -> _a
.
Кроме того, мы больше не можем самостоятельно фиксировать переменные.
any<requirements, _a> ptr(&array[0]); // illegal
Это не работает, потому что библиотека должна знать тип, с которым связывается _b, когда он захватывает концептуальные привязки. Мы должны указать связывания обоих заполнителей при построении любой
.
typedef mpl::map<mpl::pair<_a, int*>, mpl::pair<_b, int> > types; any<requirements, _a> ptr(&array[0], make_binding<types>()); any<requirements, _b> idx(2, make_binding<types>()); any<requirements, _a> x(ptr + idx); // x now holds array + 2
_b
карты к int
.
.
Мы также можем использовать tuple
, чтобы избежать необходимости явного написания карты. tuple
- это просто класс удобства, который сочетает в себе привязки заполнителя, которые он получает из всех своих аргументов.
tuple<requirements, _a, _b> t(&array[0], 2); any<requirements, _a> y(get<0>(t) + get<1>(t));
Статья Functions with Multiple Arguments раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 37. Boost.TypeErasure может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Chapter 37. Boost.TypeErasure ::
реклама |