boost :: lambda:_1不是类或命名空间

时间:2013-01-21 17:13:20

标签: c++ boost stl lambda

我想填充一组字符串,从具有此类字符串作为属性的类列表中获取(公共getter可用)。

我想使用lambda表达式和std :: for_each。

我在考虑类似的事情:

class Foo
{
    const std::string& getMe() const;
}

...
std::list<Foo> foos; // Let's image the list is not empty
std::set<std::string> strings; // The set to be filled

using namespace boost::lambda;
std::for_each(foos.begin(), foos.end(), bind(
    std::set<std::string>::insert, &strings, _1::getMe()));

但是,我在编译时遇到了这个错误:

  

_1不是类或命名空间

感谢。

1 个答案:

答案 0 :(得分:1)

这样做的正确方法是:

class Foo
{
public:
    const void* getMe() const
    {
        return this;
    }
};

int main()
{
    std::list<Foo> foos(10);
    std::set<const void*> addresses; // The set to be filled

    using boost::bind;
    std::for_each(foos.begin(), foos.end(), bind(
        &std::set<const void*>::insert, &addresses, bind(&Foo::getMe, _1)));

    return 0;
}