![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
OptionalPointee ConceptBoost , ,
|
T | is a type that is a model of OptionalPointee |
t | is an object of type T or possibly const T |
Name | Expression | Return type | Semantics | |
---|---|---|---|---|
Value Access | *t | T& | If the pointee is valid returns a reference to
the pointee. If the pointee is invalid the result is undefined. |
|
Value Access | t->xyz | T* | If the pointee is valid returns a builtin pointer to the pointee. If the pointee is invalid the result is undefined (It might not even return NULL). |
|
Validity Test | bool(t) | bool | If the pointee is valid returns true. If the pointee is invalid returns false. |
|
Invalidity Test | !t | bool | If the pointee is valid returns false. If the pointee is invalid returns true. |
Это понятие не определяет какой-либо конкретной семантики для реляционных операций, поэтому тип, который моделирует это понятие, может иметь либо мелкую, либо глубокую реляционную семантику.
Например, указатели, которые являются моделями OptionalPointee, имеют неглубокие реляционные операторы: сравнение указателей не включает сравнение указателей. Это имеет смысл для указателей, потому что они имеют неглубокую семантику копирования.
Но бустер::optional
Тем не менее, понятие itef может быть использовано для определенияглубинныхреляционных тестов, которые могут быть использованы в общем коде с любым типом моделей. OptionalPointee:
Отношение эквивалентности:
template<class OptionalPointee> inline bool equal_pointees ( OptionalPointee const& x, OptionalPointee const& y ) { return (!x) != (!y) ? false : ( !x ? true : (*x) == (*y) ) ; } template<class OptionalPointee> struct equal_pointees_t : std::binary_function<OptionalPointee,OptionalPointee,bool> { bool operator() ( OptionalPointee const& x, OptionalPointee const& y ) const { return equal_pointees(x,y) ; } } ;
Предыдущая общая функция и объект функции имеют следующую семантику:
Если обаxиyимеют действительные указатели, он сравнивает значения через<(*x == *y)
>.
Если только у одного есть действительный указатель, он возвращается<false
>.
Если оба имеют недействительные указатели, возврат<true
>.
Меньше, чем отношение:
template<class OptionalPointee> inline bool less_pointees ( OptionalPointee const& x, OptionalPointee const& y ) { return !y ? false : ( !x ? true : (*x) < (*y) ) ; } template<class OptionalPointee> struct less_pointees_t : std::binary_function<OptionalPointee,OptionalPointee,bool> { bool operator() ( OptionalPointee const& x, OptionalPointee const& y ) const { return less_pointees(x,y) ; } } ;
Предшествующая общая функция и объект функции имеют следующую семантику:
Еслиуимеет недействительный указатель, возвращается<false
>.
Другой, еслихимеет недействительный указатель, возвращается<true
>.
xиyимеют действительные указатели, сравнивают значения через<(*x <
*y).
>.
Все эти функции и объекты функций реализованы вcompare_pointees.hpp
Обратите внимание, что OptionalPointee не подразумевает псевдонима (и необязательно, например, не псевдоним); поэтому прямое использование реляционных операторов с подразумеваемым псевдонимом мелкой семантики - как с указателями - не должно использоваться с общим кодом, написанным для этой концепции.
На основе оригинальной концепции, разработанной Августом Сондерсом.
Copyright © 2003 | Фернандо Каччиола |
Распространяется в соответствии с Лицензией на программное обеспечение Boost, версия 1.0. См.www.boost.org/LICENSE_1_0.txt
Статья OptionalPointee Concept раздела может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: ::
реклама |