如何使用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实例。
答案 0 :(得分:2)
我认为使用boost bind应该有效:
std::find_if (nodes.begin(), nodes.end(),
boost::bind(&boost::apply_visitor<IsFileNodeVisitor,Node>,
IsFileNodeVisitor(), _1 )
);