![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Using AnyBoost , The Boost C++ Libraries BoostBook Documentation Subset , Chapter 37. Boost.TypeErasure
|
![]() | Note |
---|---|
|
Ссылки не могут быть восстановлены. Так же, как и встроенная ссылка на C++, после инициализации вы не можете изменить ее, чтобы указать на что-то другое.
int i, j; any<typeid_<>, _self&> x(i), y(j); x = y; // error
![]() | Note |
---|---|
|
Ссылка может быть связана с другим любой
.
typedef mpl::vector< copy_constructible<>, incrementable<> > requirements; any<requirements> x(10); any<requirements, _self&> y(x); ++y; // x is now 11
Если ссылка используется после того, как основной объект выходит из сферы действия или сбрасывается, поведение не определено.
typedef mpl::vector< copy_constructible<>, incrementable<>, relaxed > requirements; any<requirements> x(10); any<requirements, _self&> y(x); x = 1.0; ++y; // undefined behavior.
Это применимо только тогда, когда ссылка построена из значения. Если ссылка построена из другой ссылки, новая ссылка не зависит от старой.
any<requirements> x(10); boost::shared_ptr<any<requirements, _self&> > p( new any<requirements, _self&>(x)); any<requirements, _self&> y(*p); // equivalent to y(x); p.reset(); ++y; // okay
Поддерживаются ссылки как на const, так и на non-const.
int i = 0; any<incrementable<>, _self&> x(i); any<incrementable<>, const _self&> y(x);
Ссылка на не-const может быть преобразована в ссылку на const, но не наоборот. Естественно, мы не можем применить мутационные операции к ссылке на const.
any<incrementable<>, _self&> z(y); // error ++y; // error
В большинстве случаев использование любого имеет тот же синтаксис, что и использование основного объекта. Однако есть несколько случаев, когда это невозможно осуществить. Ссылка любой
является прокси-сервером и не может использоваться в контекстах, где требуется реальная ссылка. В частности, forward_iterator
не создает соответствующий ForwardIterator (если значение_type не установлено). Другое различие заключается в том, что все операции, которые не принимают по крайней мере один аргумент любой аргумент
, должны быть переданы с информацией типа явно. Статические функции и конструкторы могут попасть в эту категорию. Все это означает, что общие алгоритмы могут не работать при применении к аргументам любым
.
Статья Using Any раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 37. Boost.TypeErasure может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Chapter 37. Boost.TypeErasure ::
реклама |