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

Concept Covering and Archetypes

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

Concept Covering and Archetypes

Мы обсуждали, как важно выбрать минимальные требования (понятия) для входов в компонент, но не менее важно проверить, что выбранные понятияохватываюталгоритм. То есть любая возможная ошибка пользователя должна быть поймана концептуальными проверками и не пропущена. Концептуальное покрытие может быть проверено с помощью классовархетипов.. Класс архетипа — это точная реализация интерфейса, связанного с конкретной концепцией. Время выполнения класса архетипа не важно, функции могут быть оставлены пустыми. Простая тестовая программа может быть скомпилирована с классами архетипов в качестве входов в компонент. Если программа компилируется, то можно быть уверенным, что концепции охватывают компонент. Следующий код показывает класс архетипа для концепцииInput Iterator. Необходимо позаботиться о том, чтобы архетип точно соответствовал концепции. Например, концепция гласит, что тип возврата оператора*()должно быть преобразовано в тип значения. В нем не содержится более строгого требования о том, чтобы тип возврата былT&илиconst T&. Это означает, что было бы ошибкой использоватьT&илиconst T&для возвратного типа класса архетипа. Правильный подход заключается в создании искусственного возвратного типа, который можно конвертировать вT, как мы сделали здесь со ссылкой. Действительность теста класса архетипа полностью зависит от его точного соответствия концепции, которое должно быть проверено тщательным (ручным) осмотром.

template <class T>
class input_iterator_archetype
{
private:
  typedef input_iterator_archetype self;
public:
  typedef std::input_iterator_tag iterator_category;
  typedef T value_type;
  struct reference {
    operator const value_type&() const { return static_object<T>::get(); }
  };
  typedef const T* pointer;
  typedef std::ptrdiff_t difference_type;
  self& operator=(const self&) { return *this;  }
  bool operator==(const self&) const { return true; }
  bool operator!=(const self&) const { return true; }
  reference operator*() const { return reference(); }
  self& operator++() { return *this; }
  self operator++(int) { return *this; }
};

Общие алгоритмы часто тестируются путем инстанцирования с рядом общих типов ввода. Например, можно применитьstd::stable_sort().с основными типами указателей в качестве итераторов. Несмотря на то, что это подходит для тестирования поведения алгоритма во время выполнения, это не помогает обеспечить охват концепции, поскольку типы C++ никогда не соответствуют конкретным концепциям. Вместо этого они часто предоставляют больше, чем минимальная функциональность, требуемая какой-либо одной концепцией. Несмотря на то, что шаблон функции имеет проверки концепции и компилируется с заданным типом, проверки все еще могут не охватывать всю функциональность, которая фактически используется. Вот почему важно компилировать классы архетипов в дополнение к тестированию с общими типами ввода.

Ниже приводится выдержка изstl_concept_covering.cpp, которая показывает, как архетипы могут использоваться для проверки требуемой документации дляstd::stable_sort(). В этом случае, похоже, что требованияCopyConstructibleиAssignableбыли забыты в документации SGI STL (попробуйте удалить эти архетипы). Классы архетипов Boost были разработаны таким образом, чтобы их можно было наслоить. В этом примере тип значения итератора состоит из трех архетипов. В ссылкекласса архетипапараметры шаблона, названныеБаза, указывают, где можно использовать многоуровневую парадигму архетипа.

{
  typedef less_than_comparable_archetype< 
      sgi_assignable_archetype<> > ValueType;
  random_access_iterator_archetype<ValueType> ri;
  std::stable_sort(ri, ri);
}

Next: Programming with Concepts
Prev: Creating Concept Checking Classes


Copyright © 2000 Jeremy Siek(jsiek@osl.iu.edu) Andrew Lumsdaine(lums@osl.iu.edu), 2007 David Abrahams.

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




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



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


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 07:13:51/0.0083408355712891/1