我找到了一个简单的代码:
using namespace boost::lambda;
typedef std::istream_iterator<int> in;
std::for_each(
in(std::cin), in(), std::cout << (_1 * 3) << " " );
我发现_1
用于表示每个输入整数,但这个_1
如何工作?有人知道吗?
PS: 此代码来自BOOST的第一个示例。当我运行该文件时,我发现for_each将永远不会终止,并且在每次“返回”点击后它会保持读取数字。知道为什么会这样吗?
答案 0 :(得分:4)
Lambda将每个数字乘以3。阅读stdin
后。 in
应该是迭代器 - 请填写完整代码。
_1
是占位符,如另一个答案中所述。该问题也应该标记为Boost
。那是Boost.Lambda。
答案 1 :(得分:4)
这看起来像placeholder(另请参阅this SO question):
std::placeholders
命名空间包含占位符对象[_1, . . . _N]
,其中N是实现定义的最大数字。
当用作std::bind
表达式中的参数时,占位符对象存储在生成的函数对象中,并且当使用未绑定参数调用该函数对象时,每个占位符_N将替换为相应的第N个未绑定参数
占位符对象的类型为DefaultConstructible
和CopyConstructible
,其默认的复制/移动构造函数不会抛出异常,对于任何占位符_N
,类型为std::is_placeholder<decltype(_N)>
已定义并派生自std::integral_constant<int, N>
。