2

find_if 関数でビジターを使用するにはどうすればよいですか? 私は魔法のバインドのいくつかのクラスを行う必要があると推測しているため、これは機能しません:

    typedef boost::variant<FileNode,DirectoryNode> Node;
    typedef std::vector<Node> Nodes;
    const Nodes& nodes;
    IsFileNodeVisitor isFileNodeVisitor;
    find_if (nodes.begin(), nodes.end(), isFileNodeVisitor);

    class IsFileNodeVisitor: public boost::static_visitor<bool>
    {
    public:
        bool operator()(const FileNode&) const {
            return true;
        }

        bool operator()(const DirectoryNode&) const {
            return false;
        }
    };

上記のコードのアイデアは、ノードのベクトル内の最初の FileNode インスタンスへの反復子を与えることです。

4

1 に答える 1

2

ブーストバインドを使用するとうまくいくと思います:

 std::find_if (nodes.begin(), nodes.end(),
               boost::bind(&boost::apply_visitor<IsFileNodeVisitor,Node>,
                           IsFileNodeVisitor(), _1 )
              );
于 2012-11-26T10:47:44.520 に答える