3

我在使用 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 等人,但这不是问题的重点。)

4

1 回答 1

2

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

A*, A[N], std::map, std::multimap, std::deque, std::vector, std::basic_string. 其他所有内容都变为detail::unspecified,您可以在编译器诊断中看到。

为了让 boost.lambda 做你需要的,你可以提交一个补丁来operator_return_type_traits.hpp添加对boost::array

于 2013-11-07T03:28:32.990 回答