Все содержимое хидера <boost/compressed_pair.hpp> объявлено в пространстве имен boost.
Класс compressed_pair очень похож на std::pair, но если любой из параметров шаблона является пустым классом, тогда для уменьшения размера пары объектов применяется "оптимизация пустого базового класса".
template <class T1, class T2>
class compressed_pair
{
public:
typedef T1 first_type;
typedef T2 second_type;
typedef typename call_traits<first_type>::param_type first_param_type;
typedef typename call_traits<second_type>::param_type second_param_type;
typedef typename call_traits<first_type>::reference first_reference;
typedef typename call_traits<second_type>::reference second_reference;
typedef typename call_traits<first_type>::const_reference first_const_reference;
typedef typename call_traits<second_type>::const_reference second_const_reference;
compressed_pair() : base() {}
compressed_pair(first_param_type x, second_param_type y);
explicit compressed_pair(first_param_type x);
explicit compressed_pair(second_param_type y);
compressed_pair& operator=(const compressed_pair&);
first_reference first();
first_const_reference first() const;
second_reference second();
second_const_reference second() const;
void swap(compressed_pair& y);
};
Доступ к двум членам пары может быть выполнен через методы first() и second(). Обратите внимание, что не все методы могут быть подставлены как параметры шаблона. В частности, compressed_pair может быть конкретизирована для ссылок или векторных типов, однако в этих случаях виды допустимых конструкторов ограничены. Если типы T1 и T2 являются одинаковыми, тогда тогда объявляется единственный конструктор с одним аргументом, и этот конструктор инициализирует обе величины в паре одним переданным значением.
Заметьте, что compressed_pair не может быть конкретизирован, если любой из аргументов шаблона является типом union, до тех пора пока не будет поддержки компилятора для boost::is_union, или если boost::is_union не специализирован для данного типа union.
Наконец, предупреждение для пользователей Visual C++ 6: если любой из аргументов является пустым типом, тогда присваивание этому члену вызовет порчу памяти (memory corruption), если этот пустой тип не имеет хотя бы пустой ("do nothing") оператор присваивания. Виноват в этом баг в VC6 с генерацией операторов присваивания по умолчанию.
Revised 08 May 2001
© Copyright boost.org 2000. Permission to copy, use, modify, sell and distribute this document is granted provided this copyright notice appears in all copies. This document is provided "as is" without express or implied warranty, and with no claim as to its suitability for any purpose.
Based on contributions by Steve Cleary, Beman Dawes, Howard Hinnant and John Maddock.
Maintained by John Maddock, the latest version of this file can be found at www.boost.org, and the boost discussion list at www.yahoogroups.com/list/boost.
последняя правка: 14.05.2005
библиотека BOOST C++
http://www.boost.org
перевод
Elijah Koziev
www.solarix.ru