Function call
boost::type_erasure::call
Synopsis
template<typename Concept, typename Op, class... U>
unspecified call(const binding< Concept > & binding, const Op &,
U &&... args);
template<typename Op, class... U> unspecified call(const Op &, U &&... args);
Description
Отправляет стертую функцию типа.
<Op>должно быть примитивным понятием, которое присутствует в<Concept>. Его подпись определяет, как обрабатываются аргументы<call>. Если же<placeholder>, то<call>ожидает<any>, используя<placeholder>. При этом<any>,<call>. Тип, который он хранит, должен быть того же типа, указанного<binding>. Любые аргументы, которые не являются держателями подписи<Op>, передаются без изменений.
Если<binding>не указано, это будет выведено из аргументов. Естественно, для этого требуется хотя бы один аргумент<any>. В этом случае все<any>аргументы должны быть одинаковыми<binding>.
Пример:
typedef mpl::vector<
copy_constructible<_b>,
addable<_a, int, _b> > concept;
any<concept, _a> a = ...;
any<concept, _b> b(call(addable<_a, int, _b>(), a, 10));
Подпись<addable>является<_b(const _a&, const int&)>.
Возвращение: |
Результат операции. В случае, если тип результата подписи<Op>является заполнителем, результат будет преобразован в соответствующийлюбойтип. |
Броски: |
bad_function_call, еслиrelaxedнаходится в<Concept>и есть несоответствие типа. |