gpt4 book ai didi

c++ - 问题嵌套 boost::lambda::bind-s

转载 作者:搜寻专家 更新时间:2023-10-31 01:23:46 24 4
gpt4 key购买 nike

我有一个通用函数:

void ImageAlbum::ExpressButtonPressed(
boost::function<
void (
thumb::PhotoPrintThumbnail*,
thumb::PhotoPrintFormat,
thumb::PhotoPrintQuantity
)
> memberToCall
) {
...

BOOST_FOREACH(thumb::PhotoPrintThumbnail *pThumbnail, m_thumbs.GetSelected()) {
memberToCall(
pThumbnail,
m_expressSel.GetSelectedFormat(),
m_expressSel.GetSelectedQuantity()
);
}

...
}

我可以成功调用:

ExpressButtonPressed(boost::bind(&thumb::PhotoPrintThumbnail::AddQuantity, _1, _2, _3));

然后,我不需要将一定数量的特定格式添加到缩略图,而是需要将它们全部替换为一种格式。更准确地说,使用 1 个元素的列表,如下所示:

ExpressButtonPressed(
boost::lambda::bind(
&thumb::PhotoPrintThumbnail::SetFormats,
_1,
boost::lambda::bind(
boost::lambda::constructor<thumb::PhotoPrintThumbnail::LoadedFormats>(),
1,
boost::lambda::bind(
boost::lambda::constructor<thumb::PhotoPrintThumbnail::LoadedFormat>(),
_2,
_3
)
)
)
);

这导致“boost/lambda/detail/actions.hpp(96):错误 C2665:'boost::lambda::function_adaptor::apply':2 个重载中没有一个可以转换所有参数类型”。

我在这里做错了什么?

顺便说一句

class PhotoPrintThumbnail {
public:
...
typedef std::pair<PhotoPrintFormat, PhotoPrintQuantity> LoadedFormat;
typedef std::list<LoadedFormat> LoadedFormats;
void SetFormats(const LoadedFormats &formats);

最佳答案

您是否碰巧在使用 lambda 的代码中#include boost/bind.hpp?这会导致不合格地使用占位符(_1、_2 等)解析为由 Boost.Bind 定义的那些,并且这些不能与 Boost.Lambda 很好地混合。

重写您的代码以显式使用 boost::lambda::_[1,2,3] 而不是非限定名称在我的 VC 7.1 设置上编译良好。

关于c++ - 问题嵌套 boost::lambda::bind-s,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/759728/

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