在以下代码中,我将延迟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;
}
答案 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
,但这比使用实际类型要花费更多。