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

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

например, все знают о 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, etc...)

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

1 ответов


по-видимому, это называется "генератор объектов". См. " Больше Идиом C++" и "Boost" на эту тему.

Я лично считаю его очень полезным и использовать его много.

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

a + b + c =>
  Add<Add<A, B>, C>(...)