Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

OptionalPointee Concept

Boost , ,

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

C++ Boost

Concept: OptionalPointee

Description

A type is a model of OptionalPointee if it points to (or refers to) a value that may not exist. That is, if it has a pointee which might be valid (existent) or invalid (inexistent); and it is possible to test whether the pointee is valid or not. This model does not imply pointer semantics: i.e., it does not imply shallow copy nor aliasing.

Notation

T is a type that is a model of OptionalPointee
t is an object of type T or possibly const T

Definitions

Valid expressions

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.

Models

  • pointers, both builtin and smart.
  • boost::optional<>

OptionalPointee and relational operations

Это понятие не определяет какой-либо конкретной семантики для реляционных операций, поэтому тип, который моделирует это понятие, может иметь либо мелкую, либо глубокую реляционную семантику.
Например, указатели, которые являются моделями OptionalPointee, имеют неглубокие реляционные операторы: сравнение указателей не включает сравнение указателей. Это имеет смысл для указателей, потому что они имеют неглубокую семантику копирования.
Но бустер::optional, с другой стороны, который также является моделью OptionalPointee, имеет глубокую копию и глубокую реляционную семантику. Если для этой концепции написан общий код, важно не использовать реляционные операторы напрямую, потому что семантика может отличаться в зависимости от фактического типа.
Тем не менее, понятие 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 не подразумевает псевдонима (и необязательно, например, не псевдоним); поэтому прямое использование реляционных операторов с подразумеваемым псевдонимом мелкой семантики - как с указателями - не должно использоваться с общим кодом, написанным для этой концепции.

Acknowledgements

На основе оригинальной концепции, разработанной Августом Сондерсом.


Copyright © 2003Фернандо Каччиола

Распространяется в соответствии с Лицензией на программное обеспечение Boost, версия 1.0. См.www.boost.org/LICENSE_1_0.txt

Статья OptionalPointee Concept раздела может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 06:46:28/0.0079078674316406/1