Je dois créer l'objet boost::variant
et utiliser static_visitor
. Malheureusement j'ai besoin de paramètres supplémentaires ...Argument supplémentaire dans operator() dans boost :: static_visitor
Quelle est la meilleure solution? Pour avoir cet objet comme champ de la classe et quand je veux utiliser visiteur je dois créer une instance:
class Visitor : public boost::static_visitor<>
{
public:
Visitor(int extra): extra{extra} {}
void operator()(const T1&) { /* ... */}
void operator()(const T2&) { /* ... */}
private:
int extra;
};
et créer des visiteurs objet chaque fois que je veux l'utiliser:
Visitor visitor(x);
boost::apply_visitor(visitor, t);
ou utiliser boost :: bind et créer Visitor une fois et utiliser boost::bind
?
class Visitor : public boost::static_visitor<>
{
public:
void operator()(const T1&, int extra) { /* ... */ }
void operator()(const T2&, int extra) { /* ... */ }
};
Utilisation:
auto visitor = std::bind(SctpManager::Visitor(), std::placeholders::_1, extra);
boost::apply_visitor(visitor, t);
Ce qui est mieux (plus rapide, plus élégante) solution?
Ou y at-il de meilleures solutions?