2015-01-24 1 views
0

Мое приложение использует вариант в качестве ведра данных для переноса данных с одного объекта на другой. Примеры, которые я видел при использовании apply_visitor() для извлечения связанных данных, имеют оператор void(), поэтому apply_visitor() сам не возвращает ничего.Нужно указать указатель, где apply_visitor() возвращает значение

Может ли кто-нибудь указать мне некоторые примеры, когда apply_visitor() возвращает извлеченное значение?

ответ

3

Есть много в Boost.Variant tutorial.

Вот один из там (технически это бинарное посещение, но это наименьшее количество кода для копирования для полного примера):

class are_strict_equals 
    : public boost::static_visitor<bool> 
{ 
public:  
    template <typename T, typename U> 
    bool operator()(const T &, const U &) const 
    { 
     return false; // cannot compare different types 
    } 

    template <typename T> 
    bool operator()(const T & lhs, const T & rhs) const 
    { 
     return lhs == rhs; 
    }  
}; 

boost::variant< int, std::string > v1("hello"); 

boost::variant< double, std::string > v2("hello"); 
assert(boost::apply_visitor(are_strict_equals(), v1, v2)); 

boost::variant< int, const char * > v3("hello"); 
assert(!boost::apply_visitor(are_strict_equals(), v1, v3)); 
Смежные вопросы