1

以下のコードスニペットをコンパイルしようとしています。しかし、それは失敗します:

エラー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;
}
4

2 に答える 2

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

于 2010-05-08T17:01:32.013 に答える
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";
...
于 2010-05-08T17:13:48.150 に答える