标签: boost-lambda

bind()与C++ 11 lambdas相比有什么优势(兼容性除外)?

我正在考虑将我的代码迁移到使用C++ 11风格的lambda而不是bind到处都有.但我不确定这是不是一个好主意.

使用eg boost::lambda(或boost::phoenix)是否比C++ 11风格的lambdas有任何实际优势?

搬到lambdas是个好主意吗?我应该迁移我的代码吗?

c++ lambda boost-lambda boost-phoenix c++11

14
推荐指数
3
解决办法
804
查看次数

boost :: bind,boost :: lambda :: bind和boost :: phoenix :: bind之间的区别

我试图理解这些不同绑定方法之间的区别.boost :: bind和boost :: phoenix :: bind也有类似的问题

但是,如果有人能用例子来解释这一点,那就太好了.也就是说,boost :: phoenix是boost :: bind,booost :: lambda库的超集吗?

c++ boost boost-bind boost-lambda boost-phoenix

11
推荐指数
1
解决办法
1740
查看次数

正确使用boost lambda

考虑下面的C++ 0x代码:

a_signal.connect([](int i) {
  if(boost::any_cast<std::string>(_buffer[i]) == "foo")
  {
    base_class<>* an_object = new derived_class();
    an_object->a_method(_buffer[i]);
  }});
Run Code Online (Sandbox Code Playgroud)

如何在Boost Lambda中正确查看(因为此C++ 0x功能尚未在GCC 4.4中使用)?

c++ boost-lambda c++11

10
推荐指数
1
解决办法
1265
查看次数

提升lambda与凤凰

我最近开始关注boost phoenix,作为lambda的替代品.凤凰是lambda的完全替代品,还是凤凰城没有提供一些lambda功能?是凤凰成熟吗?有什么问题我应该知道吗?

我的主要兴趣是操作员组成,控制语句和演员表不那么重要

谢谢

c++ boost-lambda boost-phoenix

10
推荐指数
1
解决办法
1943
查看次数

另一种复制算法

我有两个向量.

vector<Object> objects;
vector<string> names;
Run Code Online (Sandbox Code Playgroud)

填充这两个向量并具有相同的大小.我需要一些算法来分配对象变量.它可以使用boost :: lambda.让我们说:

some_algoritm(objects.begin(), objects.end(), names.begin(), bind(&Object::Name, _1) = _2);
Run Code Online (Sandbox Code Playgroud)

有什么建议吗?

c++ boost stl boost-lambda

9
推荐指数
2
解决办法
547
查看次数

如何在复合类型上使用Boost.Bind?

我有std::map<int, std::pair<short, float> >,我需要short在这张地图中找到最小值.我该怎么boost::bindstd::min_element()

boost::lambda

c++ boost-bind boost-lambda

8
推荐指数
2
解决办法
992
查看次数

boost :: bind和boost :: lambda :: bind有什么区别?

我可以看到Boost有两个不同的绑定库,一个是"独立的",可以通过包含使用boost/bind.hpp,另一个通过包含使用boost/lambda/bind.hpp.这两者有什么区别?

c++ boost boost-bind boost-lambda

6
推荐指数
1
解决办法
1636
查看次数

如何使用boost :: transform_iterator使用phoenix表达式?

<更新>像我一样,问题是错误的.实际问题是:为什么transform_iterator不使用传统的result_of <>元函数来确定返回类型,而不是直接访问UnaryFunc :: result_type.通过解决方案发表答案. </更新>

具体来说,有没有办法让phoenix表达式暴露出result_typestd :: unary_function概念所期望的类型?boost :: transform_iterator似乎期待这个,并且通过查看它的src,我看不到简单的解决方法.

这里有一些代码可以重现我一直遇到的问题:

#include <boost/iterator/transform_iterator.hpp>
#include <boost/spirit/home/phoenix.hpp>
#include <numeric>
#include <iostream>

using namespace boost::phoenix;
using namespace boost::phoenix::arg_names;

int main(void){
   int i[] = {4,2,5,3};

   std::cout <<
      std::accumulate(
         boost::make_transform_iterator(i,   _1*_1),
         boost::make_transform_iterator(i+4, _1*_1),
         0
      ) << std::endl;

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译它的错误消息的相关部分是(gcc 4.3.4,boost 1.43):

/usr/include/boost/iterator/transform_iterator.hpp:43: error: no type named ‘result_type’ in ‘struct boost::phoenix::actor<...
Run Code Online (Sandbox Code Playgroud)

我对boost :: lambda(缺失result_type)有同样的问题.我以为我过去看过make_transform_iterator和lambda的类似用法,现在我想知道我是不是想象它.

是否有一个提供的包装器或凤凰或lambda中的其他机制来暴露result_type

c++ boost boost-lambda boost-phoenix

5
推荐指数
1
解决办法
509
查看次数

在boost :: lambda中使用boost :: format

出于某种原因,我无法使用boost::formatboost::lambda.这是(希望)可编译的代码简化:

#include <algorithm>
#include <iomanip>
#include <iostream>

#include <boost/assign/list_of.hpp>
#include <boost/format.hpp>
#include <boost/lambda/lambda.hpp>

namespace bl = boost::lambda;

int main()
{
    const std::vector<int> v = boost::assign::list_of(1)(2)(3);
    std::for_each(v.begin(), v.end(), bl::var(std::cout) << std::setw(10) << bl::_1);
    std::for_each(v.begin(), v.end(), bl::var(std::cout) << boost::format("%10d") % bl::_1);
}
Run Code Online (Sandbox Code Playgroud)
  • 第一个std::for_each产生预期的输出
  • 第二个std::for_each只输出没有任何数字的空格

这是为什么 ?我真的不熟悉boost::lambda所以我可能会错过这里明显的.

请不要建议std::copy基于答案:我的实际代码不起作用,std::vector但实际上是boost::fusion::vector(并且std::for_each实际上是a boost::fusion::for_each).

c++ boost-lambda boost-format

5
推荐指数
1
解决办法
553
查看次数

c ++提升lambda库

什么是使用boost lambda库开始编程的最佳方法.

c++ functional-programming boost-lambda

4
推荐指数
1
解决办法
4629
查看次数