我想通過lambda :: bind調用成員。不幸的是,我有兩個具有相同名稱但返回類型不同的成員。 有沒有辦法來幫助lambda :: bind推斷成員函數調用的正確返回類型? (結合正常工作與明確的返回類型扣)boost lambda :: bind返回類型選擇
#include <vector>
#include <iostream>
#include <algorithm>
#include <boost/bind.hpp>
#include <boost/lambda/lambda.hpp>
#include <boost/lambda/bind.hpp>
using namespace std;
using namespace boost;
struct A
{
A (const string & name) : m_name(name) {}
string & name() { return m_name; }
const string & name() const { return m_name; }
string m_name;
};
vector<A> av;
int main()
{
av.push_back (A ("some name"));
// compiles fine
find_if(av.begin(), av.end(), bind<const string &>(&A::name, _1) == "some name");
// error: call of overloaded 'bind(<unresolved overloaded function type>, const boost::lambda::lambda_functor<boost::lambda::placeholder<1> >&)' is ambiguous
find_if(av.begin(), av.end(), lambda::bind(&A::name, lambda::_1) == "some name");
return 0;
}
您剛纔指出了真正的問題:) 有一種方法來覆蓋拉姆達的返回類型::提升,但它僅適用爲lambda表達式不爲綁定。參見:lambda :: ret(e)。不幸的是,在目前的情況下,它不適用... –
psaghelyi
2010-04-30 21:27:50