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

Concept Definitions

Boost , The Boost C++ Libraries BoostBook Documentation Subset , Chapter 37. Boost.TypeErasure

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

PrevUpHomeNext

Понятие определяет набор ограничений на типы, которые хранятся влюбой.

Существует три вида понятий.

  1. Библиотека определяет рядпредопределенных понятий.. Большинство из них эквивалентны пользовательским концепциям, но некоторые требуют специальной обработки.
  2. Пользователи могут определить свои собственные примитивные концепции, как описано ниже. МакросыBOOST_TYPE_ERASURE_MEMBERиBoost_TYPE_ERASURE_FREEопределяют понятия этой формы.
  3. Любая передовая последовательность MPL, элементы которой являются концепциями, также является концепцией. Это позволяет легко составлять концепции.

Каждое примитивное понятие определяет одну функцию. Первичная концепция должна быть специализацией шаблона класса, с статичной функцией члена, называемой, применяемой, которая будет выполняться, когда функция отправляется вызовом. Шаблон может принимать только параметры типа шаблона. Нетиповые параметры шаблона и параметры шаблона шаблона не допускаются.

Параметры шаблона концепции могут включать в себя заполнители. Рассмотрены следующие вопросы.

  • Каждый аргумент шаблона может быть cv и/или эталонным квалифицированным типом заполнителя.
  • Если аргумент шаблона является типом функции, его аргументы и тип возврата могут быть квалифицированными заполнителями.

Любые другие держатели игнорируются.

Понятие инстанциируется путем построениялюбогоиз исходного значения или путем построениясвязывания. Когда концепция инстанцируется определенным набором связываний типа, каждый заполнитель связывается с неквалифицированным типом ссылки cv. После замены каждого заполнителя в списке аргументов шаблона на тип, к которому он привязан, необходимо придерживаться следующего.

  • Число аргументов, применяемых в связанном понятии, должно быть таким же, как число аргументов в несвязанном понятии.
  • Аргументы и тип возврата, применимые в связанном понятии, могут быть получены из соответствующих аргументов и тип возврата в несвязанном понятии следующим образом: Если аргументом в несвязанной концепции является заполнитель с факультативными квалификаторами cv и эталонными квалификаторами, то аргумент в связанной концепции может быть найден путем замены заполнителя. В противном случае аргумент в несвязанной концепции должен быть таким же, как аргумент в связанной концепции.
// Correct.
template<class T = _self>
struct foo1 {
  static void apply(const T& t) { t.foo(); }
};
// Wrong.  The signature of apply is different from the
// primary template
template<>
struct foo1<int> {
  static void apply(int i);
};
// Wrong.  A concept must be a template
struct foo2 {
  static void apply(const _self&);
};
// Wrong. apply must be static
template<class T = _self>
struct foo3 {
  void apply(const T&);
};
// Wrong.  apply cannot be overloaded
template<class T = _self>
struct foo3 {
  static void apply(T&);
  static void apply(const T&);
};
// Wrong.  Only top level placeholders are detected
template<class T>
struct foo4;
template<class T>
struct foo4<boost::mpl::vector<T> > {
  static void apply(const T&);
};
// Wrong.  Template template parameters are not allowed.
template<template<class> class T>
struct foo5
{
    static void apply(T<int>&);
};

PrevUpHomeNext

Статья Concept Definitions раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 37. Boost.TypeErasure может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Chapter 37. Boost.TypeErasure ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 17:23:30/0.0066418647766113/0