Boost.Lambda和Boost.Function与Boost.Array不能很好地配合,为什么?

时间:2013-11-06 03:29:02

标签: c++ boost boost-function boost-lambda

我遇到了极度令人沮丧的Boost问题。

当我尝试运行像

这样简单的事情时
#include <boost/function.hpp>
#include <boost/lambda/core.hpp>
#include <boost/lambda/bind.hpp>
#include <boost/lambda/lambda.hpp>
#include <boost/array.hpp>

int main()
{
    boost::function<size_t(boost::array<size_t, 1>, size_t)> f =
        boost::lambda::_1[boost::lambda::_2];
    return 0;
}

我回来了:

error C2440: 'return' :
    cannot convert from 'boost::lambda::detail::unspecified' to 'size_t'

为什么会出现此错误,如何让Boost.Lambda做我需要的?

(是的,我知道我也可以使用Boost.Phoenix等人,但这不是问题的重点。)

1 个答案:

答案 0 :(得分:2)

boost :: lambda中的

下标运算符仅支持以下类型(来自我的boost 1.53安装的lambda/detail/operator_return_type_traits.hpp):

A*A[N]std::mapstd::multimapstd::dequestd::vectorstd::basic_string。其他所有内容都变为detail::unspecified,您可以在编译器诊断中看到它。

要使boost.lambda满足您的需求,您可以向operator_return_type_traits.hpp提交补丁,添加对boost::array的支持