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

Действительно ли это - общий шаблон/идиома для использования бесплатных функций в качестве псевдоконструкторов, чтобы избежать необходимости явно указывать шаблонные параметры?

Например, все знают о std::make_pair, который использует его параметры для выведения pair типы:

template <class A, class B>
std::pair<A, B> make_pair(A a, B b)
{
  return std::pair<A, B>(a, b);
}

// This allows you to call make_pair(1, 2),
// instead of having to type pair<int, int>(1, 2)
// as you can't get type deduction from the constructor.

STL также делает интенсивное использование из этого в <functional> (bind1st, not1, ptr_fun, и т.д....)

Я использую это довольно часто, таким образом, я просто задавался вопросом, используют ли многие другие люди его, и если существует название этого шаблона?

6
задан Peter Alexander 17 March 2010 в 22:59
поделиться

1 ответ

По-видимому, он называется «Генератор объектов». См. "Другие идиомы C++" и "Boost" по этой теме.

Лично я нахожу его очень полезным и часто его использую.

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

a + b + c =>
  Add<Add<A, B>, C>(...)
8
ответ дан 16 December 2019 в 21:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: