我想獲得下面的代碼片段進行編譯。但它失敗:boost :: lambda綁定表達式不能綁定到字符串的空()來工作
錯誤C2665:'boost :: lambda :: function_adaptor :: apply':8個重載都不能轉換所有的參數類型。在調用綁定時指定返回類型無濟於事。
任何想法我做錯了什麼?
#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;
}
唉唉感謝。發現boot/bind.hpp包含在我的項目中。一旦我刪除了包含,它運行良好。不知道爲什麼它沒有給我一個更具描述性的錯誤。 – navigator 2010-05-08 17:08:09
@navigator是的,我自己遇到了。 boost bind將_1放在匿名命名空間中,這會導致與lambda的所有混淆。 – Anycorn 2010-05-08 17:10:06