【问题标题】:How to modify boost::apply_visitor to return a value?如何修改 boost::apply_visitor 以返回值?
【发布时间】:2015-11-24 09:15:41
【问题描述】:

我正在尝试使用 boost::variant 和 boost::apply_visitor。这已经有效,除非我尝试让 Vistor 的函数返回一个(布尔)值。我看到了很多关于这样做的例子,但我无法创建一个工作样本。这是我没有返回值的代码:

#include <iostream>
#include <boost/variant.hpp>
#include <string>
#include <conio.h>


class CnVisitor : public boost::static_visitor<>
{
public:
    void operator()(double& valueFloat ) const
    {
        std::cout << (double)valueFloat;
    }

    void operator()(std::string& valueString ) const
    {
        std::cout << valueString.c_str ();
    }
};


int main()
{
    std::vector< boost::variant< double, std::string >> vec;

    vec.push_back((double)1.423423);
    vec.push_back((std::string)"some text");

    CnVisitor l_Visitor;

    for ( int i = 0; i < vec.size (); ++i )
    {
        boost::apply_visitor ( l_Visitor, vec[i] );
    }

    _getch ();
}

【问题讨论】:

    标签: c++ boost-variant apply-visitor


    【解决方案1】:

    通过与其他示例进行比较,我自己找到了解决方案。您必须修改不仅函数 (A),还必须修改 Static_visitor (B) 的声明

    • (A) bool operator()(double& valueFloat) const
    • (B) 类 CnVisitorReturn : public boost::static_visitorbool>

    显示修改后的示例:

    #include <iostream>
    #include <boost/variant.hpp>
    #include <string>
    #include <conio.h>
    
    class CnVisitorReturn : public boost::static_visitor<bool>
    {
    public:
        bool operator()(double& valueFloat ) const
        {
            std::cout << (double)valueFloat;
            return true;
        }
    
        bool operator()(std::string& valueString ) const
        {
            std::cout << valueString.c_str ();
            return true;
        }
    };
    
    
    int main()
    {
        std::vector< boost::variant< double, std::string >> vec;
    
        vec.push_back((double)1.423423);
        vec.push_back(static_cast<std::string>("some text"));
    
        CnVisitorReturn l_VisitorReturn;
    
        for ( int i = 0; i < vec.size (); ++i )
        {
            bool temp = boost::apply_visitor ( l_VisitorReturn, vec[i] );
        }
    
        _getch ();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多