Как мне использовать посетителя с функцией 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 в векторе узлов.
Я думаю, что с помощью Boost Bind должно сработать :
std::find_if (nodes.begin(), nodes.end(),
boost::bind(&boost::apply_visitor<IsFileNodeVisitor,Node>,
IsFileNodeVisitor(), _1 )
);
Других решений пока нет …