【发布时间】:2010-10-24 18:56:13
【问题描述】:
我已经看到 two 最近的 answers 使用 _1 作为纯 C++0x 解决方案(没有明确提及 boost lambdas)。
有没有像std::_1 这样的动物,我认为拥有原生 lambda 会使这样的构造变得多余。
对std::_1 的Google 代码搜索会从同一项目中找到two results,因此尚无定论。
【问题讨论】:
我已经看到 two 最近的 answers 使用 _1 作为纯 C++0x 解决方案(没有明确提及 boost lambdas)。
有没有像std::_1 这样的动物,我认为拥有原生 lambda 会使这样的构造变得多余。
对std::_1 的Google 代码搜索会从同一项目中找到two results,因此尚无定论。
【问题讨论】:
是的,它们是 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。
【讨论】:
是的,它们是 C++0x 的一部分。我没有仔细检查 TR1 规范,但我怀疑它们是在那里添加的(TR1 本质上是 C++03 的一个仅限库的扩展,所以它不能依赖 lambdas),然后,因为它已经在那里在 TR1 中,在 C++0x 中再次删除它会造成不必要的破坏,即使一旦你拥有真正的 lambda 就不再需要它。
【讨论】:
显然它们是 C++ 0x 的一部分,应该在符合编译器的 <functional> 标头中定义,请参阅以下常见问题解答:
【讨论】: