You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Boost.Spirit.X3解析到std::tuple时报错期望tuple-like类型问题

问题原因

该编译错误并非std::tuple不属于tuple-like类型,而是Boost.Spirit.X3内部使用Boost.Fusion库处理属性类型的序列化与匹配,默认没有启用std::tuple的类型适配,因此Spirit无法识别传入的std::tuple<int, double>是符合要求的属性类型。

解决方案

只需在代码中额外引入Boost.Fusion的std_tuple适配头即可:

#include <boost/fusion/adapted/std_tuple.hpp>

提示:若后续需要使用std::pair、std::array等其他标准库类型作为Spirit的解析属性,也需要对应引入boost/fusion/adapted/目录下的对应适配头文件。

修改后的完整可编译代码
#include <string>
#include <tuple>
#include <boost/spirit/home/x3.hpp>
#include <boost/fusion/adapted/std_tuple.hpp>

void parseInteger(std::string input) {
    namespace x3 = boost::spirit::x3;
    auto iter = input.begin();
    auto end_iter = input.end();
    int result;
    x3::parse(iter, end_iter, x3::int_, result);
}

void parseIntegerAndDouble(std::string input) {
    namespace x3 = boost::spirit::x3;
    auto iter = input.begin();
    auto end_iter = input.end();
    std::tuple<int, double> result;
    x3::parse(iter, end_iter, x3::int_ >> ' ' >> x3::double_, result);
}

int main(int, char **)
{
    parseInteger("567");
    parseIntegerAndDouble("321 3.1412");
    return 0;
}

内容的提问来源于stack exchange,提问作者Niels Holst

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 14:15:03