Ich habe 2 Strukturen Basis und abgeleitet und Boost: Variante mit 2 Arten.
Boost-Variante und Besucher
struct Base : public boost::static_visitor<>
{
virtual void operator(Type1& t) {}
virtual void operator(Type2& t) {}
};
Was ich tun möchte, ist Abgeleitet definiere als:
struct Derived : public Base
{
void operator(Type1& t) { /*some impl*/ }
};
ich Operator überschreiben nicht für die Typ2 vorausgesetzt, es ist in der Base und leer definiert ist.
Aus irgendeinem Grund, wenn ich
Derived visitor;
boost::apply_visitor(visitor, variant);
ich Fehler schreiben: keine Übereinstimmung für Aufruf '(Derived) (Typ2 &)'
Natürlich, wenn ich hinzufügen Operator für Typ2 in abgeleitet es funktioniert ok.
Könnte jemand bitte helfen zu verstehen, warum es nicht funktioniert, ohne Operator für Typ2 hinzuzufügen?
' virtual void Operator (Typ1 & t) {} 'ist nicht gültig Syntax. Was hast du _actually_ geschrieben? – cpplearner