我看到two最近answers使用_1
作为纯C ++ 0x解决方案(没有明确提及boost lambdas)。
是否有像std::_1
这样的动物我会认为拥有原生的lambdas会使这样的构造变得多余。
对std::_1
的Google代码搜索会从同一项目中带来two results,这样就无法确定。
答案 0 :(得分:13)
是的,它们是std::placeholders
命名空间中C ++ 0x的一部分,来自最新草案(n3126)§20.8.10.1.3“占位符”:
namespace std {
namespace placeholders {
// M is the implementation-defined number of placeholders
extern unspecified _1;
extern unspecified _2;
.
.
.
extern unspecified _M;
}
}
它们实际上是included in TR1(n1836§3.6.4; n1455)以及bind
,它们取自Boost.Bind library。
答案 1 :(得分:5)
显然它们是C ++ 0x的一部分,应该在符合编译器的<functional>
标头中定义,请参阅以下FAQ:
答案 2 :(得分:5)
是的,它们是C ++ 0x的一部分。我没有仔细检查TR1规格,但我怀疑它们是在那里添加的(TR1本质上是C ++ 03的仅库扩展,因此它不能依赖lambdas),然后,因为它已经存在在TR1中,在C ++ 0x中再次删除它会不必要地具有破坏性,即使你拥有真正的lambda也不再需要它。