比较boost :: variant与std :: string

问题描述

当尝试比较两个字符串时,其中一个字符串包装在boost :: variant类型中,它只工作一半时间。如果我的boost :: variant包含string,int,double和bool,则它不起作用(它给我这个错误libc++abi.dylib: terminating with uncaught exception of type boost::wrapexcept<boost::bad_get>: boost::bad_get: Failed value get using boost::get Abort trap: 6)。但是,如果我的boost :: variant只包含一个字符串和一个int,它就可以正常工作!这对我来说毫无意义。如果您知道为什么会发生这种情况以及如何解决,请告诉我。

// variant_equality.cpp

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

// doesn't work: #define varied_type boost::variant<std::string,int,double,bool>

// does work: #define varied_type boost::variant<std::string,int>

bool variant_equal(varied_type v,std::string normal) {
    try {
        return boost::get<std::string>(v) == normal;
    }

    catch (boost::bad_get) {
        return false;
    }
}

int main() {
    varied_type bar = "foo";
    std::cout << variant_equal(bar,"foo") << std::endl;
    return 0;
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)