Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using free function as pseudo-constructors to exploit template parameter deduction

Is it a common pattern/idiom to use free functions as pseudo-constructors to avoid having to explicitly specify template parameters?

For example, everyone knows about std::make_pair, which uses its parameters to deduce the pair types:

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.

The STL also makes heavy use of this in <functional> (bind1st, not1, ptr_fun, etc...)

I find myself using this quite often, so I was just wondering if many other people use it, and if there is a name for this pattern?

like image 570
Peter Alexander Avatar asked Mar 17 '10 22:03

Peter Alexander


1 Answers

Apparently it's called "Object Generator". See "More C++ Idioms" and "Boost" on this topic.

I personally find it very useful and use it alot.

Also, I think one might see expression templates as a special form of object generators, since all they do is construct complex types by means of operand types and data you normally could specify also manually. Except, they are calling the generators implicitly

a + b + c =>
  Add<Add<A, B>, C>(...)
like image 195
Johannes Schaub - litb Avatar answered Sep 19 '22 01:09

Johannes Schaub - litb