如何使用boost :: spirit :: x3测试有效的双重内容

How to test string for valid double content with boost::spirit::x3?

本文关键字:有效 测试 何使用 boost spirit x3      更新时间:2023-10-16

我正在尝试确定给定字符串是否是有效的双表示。我使用的代码看起来像:

bool testNumeric(const std::string& s)
{
    try
    {
        const auto doubleParser = boost::spirit::x3::double_;
        auto iter = s.begin();
        auto end_iter = s.end();
        double result = 0.;
        boost::spirit::x3::parse(iter, end_iter, doubleParser, result);
        return iter == end_iter;
    }
    catch (...)
    {
        return false;
    }
}

我对最终的双重不感兴趣(目前)。如果我给出此功能的输入" 1E10000000",显然对于双重而言太大了,则该程序会在断言中失败(boost_assert)。可以以某种方式将其更改为通过返回代码失败或投掷异常,我可以抓住它?还是我必须用Spirit写自己的双重解析器:: x3?

最后,我创建了一种自定义解析方法,该方法首先使用boost :: spirit :: x3 :: int_在双重字符串表示的指数部分(如果存在)并返回如果指数不满足双重类型的边界。之后,我将有效字符串上的Boost :: Spirit :: X3 :: Double_解析器。