boost :: variant和std :: find_if

时间:2012-11-26 10:04:12

标签: c++ c++98

如何使用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实例。

1 个答案:

答案 0 :(得分:2)

我认为使用boost bind应该有效:

 std::find_if (nodes.begin(), nodes.end(),
               boost::bind(&boost::apply_visitor<IsFileNodeVisitor,Node>,
                           IsFileNodeVisitor(), _1 )
              );