C++ Boost Variant

Da Andreabont's Wiki.

Variant è un tipo di dato multiplo fornito dalla libreria Boost del C++. Essendo fornito sotto forma di template è necessario fornire durante la dichiarazione la lista di tipi che può gestire come parametri del template.

Esempio base

#include "boost/variant.hpp"
#include <iostream>

int main()
{
    boost::variant<int, std::string> variabile;

    variabile = "ciao mondo!";

    std::cout << variabile << std::endl;

    variabile = 10;

    std::cout << variabile << std::endl;
}

Esempio visitor

Il visitor nei variant è un funtore contenente una funzione per ogni tipo dato contenuto nel variant, al quale può essere applicato. Rispetto al variant dichiarato nell'esempio precedente potremmo avere un visitor che accetta string o int e restituisce void:

class my_visitor : public boost::static_visitor<void>
{
public:
    void operator()(int i) const
    {
        std::cout << "Variant contiene INT" << std::endl;
    }
    
    void operator()(const std::string & str) const
    {
        std::cout << "Variant contiene STRING" << std::endl;
    }
};

Per applicare il visitor al variant è possibile usare la seguente funzione fornita dalla libreria:

boost::apply_visitor(my_visitor(), variabile);