gpt4 book ai didi

c++ - Boost.Bind - 理解占位符

转载 作者:可可西里 更新时间:2023-11-01 18:35:05 28 4
gpt4 key购买 nike

我试图理解以下示例,它类似于(但不等于)之前在 SO Help understanding boost::bind placeholder arguments 上发布的示例:

#include <boost/bind.hpp>
#include <functional>

struct X {
int value;
};

int main() {
X a = { 1 };
X b = { 2 };

boost::bind(std::less<int>(),
boost::bind(&X::value, _1),
boost::bind(&X::value, _2))
(a, b);
}

这怎么可能,最外层的绑定(bind)函数知道它必须将第一个参数传递给第二个绑定(bind)(期望 _1 ),并将第二个参数传递给第三个绑定(bind)(期望 _2 )?我的看法是首先评估内部 Binder ,因此它们变成两个一元函数对象,然后传递给 less<int> 的 Binder 目的。当新创建的功能对象被两个对象调用时,a转到第一个内部绑定(bind),b转到第二个。如果我是对的,我们会使用 _1两次。我一定是错的。我将再次重复我的问题以阐明我的问题:外部 Binder 如何知道哪个占位符用于哪个内部 Binder ?

最佳答案

参数打包在元组 (a,b) 中并传递给仿函数。然后内部仿函数决定它需要哪个元组元素,例如尝试:

boost::bind(&X::value, _1)(a,b)
boost::bind(&X::value, _2)(a,b)

更一般地说,每个值,无论它是常量/引用/占位符,都表示为接受参数元组并返回值的仿函数。

bind(f, 10)(a) // still functor which discards arguments

现在,我不能百分百确定 bind 是如何做到的。然而,这就是 phoenix 实现其功能的方式。如果您想了解 bind/lambda 实现的机制,请查看 phoenix,它具有很强的可扩展性并且具有出色的文档。

关于c++ - Boost.Bind - 理解占位符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3754362/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com