Ich muss boost::variant
Objekt erstellen und static_visitor
verwenden. Leider brauche ich extra Parameter ...Zusätzliches Argument in operator() in boost :: static_visitor
Welche Lösung ist besser? Um dieses Objekt als Feld der Klasse zu haben, und wenn ich Besucher verwenden mag Ich habe Instanz erstellen:
class Visitor : public boost::static_visitor<>
{
public:
Visitor(int extra): extra{extra} {}
void operator()(const T1&) { /* ... */}
void operator()(const T2&) { /* ... */}
private:
int extra;
};
und Besucher Objekt jedes Mal, wenn ich will, es benutzen:
Visitor visitor(x);
boost::apply_visitor(visitor, t);
oder boost :: bind verwenden und Besucher einmal erstellen und boost::bind
verwenden?
class Visitor : public boost::static_visitor<>
{
public:
void operator()(const T1&, int extra) { /* ... */ }
void operator()(const T2&, int extra) { /* ... */ }
};
Verbrauch:
auto visitor = std::bind(SctpManager::Visitor(), std::placeholders::_1, extra);
boost::apply_visitor(visitor, t);
Was ist besser (schneller, elegante) Lösung?
Oder gibt es bessere Lösungen?