0

そのような文字列を属性として持つクラスのリストから、文字列のセットをフルフィルしたいと思います (公開ゲッターが利用可能)。

ラムダ式と 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 はクラスまたは名前空間ではありません

ありがとう。

4

1 に答える 1

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;
}
于 2013-01-22T10:20:52.273 に答える