提升的返回类型是什么::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;
}

根据http://www.boost.org/doc/libs/1_52_0/doc/doc/html/boost/apply_visitor.html,实际类型是apply_visitor_delayed_t<times_two_generic>

由于它只是另一个函数对象,因此您也可以使用std::function,但要比使用真实类型要花费更多。

最新更新