boost :: lambda绑定表达式无法绑定到string的empty()来工作

时间:2010-05-08 16:42:51

标签: c++ boost-lambda

我想让下面的代码片段进行编译。但它失败了:

错误C2665:'boost :: lambda :: function_adaptor :: apply':8个重载中没有一个可以转换所有参数类型。调用bind时指定返回类型没有帮助。

知道我做错了吗?

#include <boost/lambda/lambda.hpp>
#include <boost/lambda/bind.hpp>
#include <string>
#include <map>

int main()
{

    namespace bl = boost::lambda;
    typedef std::map<int, std::string> types;
    types keys_and_values;
    keys_and_values[ 0 ] = "zero";
    keys_and_values[ 1 ] = "one";
    keys_and_values[ 2 ] = "Two";

    std::for_each(
        keys_and_values.begin(),
        keys_and_values.end(),
        std::cout <<  bl::constant("Value empty?: ") << std::boolalpha <<  
                        bl::bind(&std::string::empty,
                                bl::bind(&types::value_type::second, _1)) << "\n");




    return 0;
}

2 个答案:

答案 0 :(得分:2)

使用g ++进行编译的小改动(更好的编译器的时间:-)?)

 1 #include <boost/lambda/lambda.hpp>
 2 #include <boost/lambda/bind.hpp>
 3 #include <algorithm>
 4 #include <iostream>
 5 #include <string>
 6 #include <map>
 7
 8 int main()
 9 {
10
11     namespace bl = boost::lambda;
12     typedef std::map<int, std::string> types;
13     types keys_and_values;
14     keys_and_values[ 0 ] = "zero";
15     keys_and_values[ 1 ] = "one";
16     keys_and_values[ 2 ] = "Two";
17
18     std::for_each(
19                   keys_and_values.begin(),
20                   keys_and_values.end(),
21                   std::cout <<  bl::constant("Value empty?: ") << std::boolalpha <<
22                   bl::bind(&std::string::empty,
23                            bl::bind(&types::value_type::second, bl::_1)) << "\n");
24
25
26
27
28     return 0;
29 }

通知缺少包含和bl::_1

答案 1 :(得分:1)

#include <boost/foreach.hpp>
...
#define foreach BOOST_FOREACH
...
foreach(types::value_type kv, keys_and_values)
  std::cout <<  "Value empty?: " << std::boolalpha 
            <<  kv.second.empty() << "\n";
...