Какой тип возврата boost :: apply_visitor (отложенная версия)

В следующем коде я сохранил результат задержки apply_visitor в auto переменная. Какой тип я могу использовать вместо auto? Можно ли использовать std::function?

#include "boost/variant/variant.hpp"#include "boost/variant/apply_visitor.hpp"
using namespace std;
using namespace boost;

class times_two_generic
: public boost::static_visitor<>
{
public:

template <typename T>
void operator()( T & operand ) const
{
operand += operand;
}

};

int main(int argc, char **argv)
{
variant<int, string> v = 5;
times_two_generic visitor;

cout << v << endl;

apply_visitor(visitor)(v); // v => 10
auto appliedVisitor = apply_visitor(visitor);
appliedVisitor(v); // v => 20

cout << v << endl;
return 0;
}

3

Решение

В соответствии с http://www.boost.org/doc/libs/1_52_0/doc/html/boost/apply_visitor.html, фактический тип apply_visitor_delayed_t<times_two_generic>.

Поскольку это просто еще один функциональный объект, вы также можете использовать std::function, но это будет стоить дороже, чем использование реального типа.

3

Другие решения

Других решений пока нет …