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?
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>(...)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With