Boost :: вариант и std :: find_if

Как мне использовать посетителя с функцией 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 в векторе узлов.

2

Решение

Я думаю, что с помощью Boost Bind должно сработать :

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

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector