Pet*_*der 6 c++ templates design-patterns 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.
Run Code Online (Sandbox Code Playgroud)
STL中也大量使用这种在<functional>(bind1st,not1,ptr_fun,等...)
我发现自己经常使用这个,所以我只是想知道是否有很多人使用它,如果有这个模式的名字?
显然它被称为"对象生成器".有关此主题,请参阅"更多C++习语"和"提升".
我个人认为它非常有用并且很多用它.
此外,我认为可以将表达式模板视为对象生成器的一种特殊形式,因为它们所做的只是通过操作数类型和通常也可以手动指定的数据来构造复杂类型.除此之外,他们隐含地调用了生成器
a + b + c =>
Add<Add<A, B>, C>(...)
Run Code Online (Sandbox Code Playgroud)