使用自由函数作为伪构造函数来利用模板参数推导

时间:2010-03-17 22:59:46

标签: c++ design-patterns templates type-inference

使用自由函数作为伪构造函数来避免必须明确指定模板参数是一种常见的模式/习惯用法吗?

例如,每个人都知道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>bind1stnot1ptr_fun等中大量使用此内容...)

我发现自己经常使用它,所以我只是想知道是否有很多人使用它,以及这个模式是否有名称?

1 个答案:

答案 0 :(得分:8)

显然它被称为“对象生成器”。有关此主题的信息,请参阅"More C++ Idioms""Boost"

我个人认为非常有用,并且很多时候使用它。

此外,我认为可以将表达式模板视为对象生成器的一种特殊形式,因为它们所做的只是通过操作数类型和通常也可以手动指定的数据来构造复杂类型。除此之外,他们隐含地调用生成器

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