Hier sind einige Beispiele (aus dem Gedächtnis geschrieben):
typedef boost::variant<
std::string,
int
> StringOrInt; // using a typedef is just for convenience
StringOrInt myVariant;
myVariant = std::string("hello"); // both of these work
myVariant = 5;
std::vector<StringOrInt> myvec;
myvec.push_back(5);
myvec.push_back(std::string("hello"));
Dann zu lesen, gibt es zwei Möglichkeiten. Einer benutzt boost :: get, der andere benutzt einen Besucher. Besucher sind normalerweise etwas robuster, aber wenn es ein einfacher Fall ist, kann boost :: get gut funktionieren.
Da Sie wahrscheinlich iterieren, wird ein Besucher wahrscheinlich besser arbeiten. Sie erstellen einen Funktor mit Überladungen für jeden Typ in Ihrer Variante und verwenden boost::apply_visitor
. Zum Beispiel:
struct MyVisitor {
void operator()(const std::string& arg) const {
std::cout << "It was a string";
}
void operator()(int arg) const {
std::cout << "It was an int";
}
};
MyVisitor myVisitor;
for (auto& val : myvec) {
boost::apply_visitor(myVisitor, val);
}
Was haben Sie bisher versucht? Beispielcode – DimChtz
Wenn ich 'boost :: variant richtig bin, Vektor > v;' definiert einen Vektor 'v' mit int und String-Eingaben. Aber ich bin unsicher, wie ich es füllen soll. –
Sid
@DimChtz, ich habe auch auf den Boost [Tutorial] (http://www.boost.org/doc/libs/1_55_0/doc/html/variant/tutorial.html) – Sid