【问题标题】:Boost.Lambda and Boost.Function don't play nicely with Boost.Array, why?Boost.Lambda 和 Boost.Function 不能很好地与 Boost.Array 配合使用,为什么?
【发布时间】:2013-11-06 03:29:02
【问题描述】:

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

【问题讨论】:

  • @user1095108:使用 boost.lambda 制作一个显然具有boost::lambda::_1[boost::lambda::_2] 效果的 lambda。

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


【解决方案1】:

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 的支持

【讨论】:

  • 哇哦,我永远不会猜到他们会特意处理它。 +1 非常感谢您的指点。
猜你喜欢
  • 2014-07-04
  • 2019-04-26
  • 1970-01-01
  • 2011-02-27
  • 1970-01-01
  • 2013-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多