gsl :: span无法使用std :: regex进行编译

尼古拉斯·霍尔特豪斯(Nicolas Holthaus)

我试图用来gsl::span将一些数据从混合的二进制/ ASCII数据的打包结构(因此为novectorstring)传递给一个函数,在该函数中我想使用正则表达式对其进行操作,但是出现以下错误:

错误C2784:'布尔std :: regex_match(_BidIt,_BidIt,std :: match_results <_BidIt,_Alloc>&,const std :: basic_regex <_Elem,_RxTraits>&,std :: regex_constants :: match_flag_type)':无法推断'std :: cmatch'中'std :: match_results>,_ Alloc>&'的模板参数

参见'std :: regex_match'的声明

这是我想做的事情:

#include <regex>
#include "gsl.h"

using namespace std;
using namespace gsl;

int main(int argc, const char **argv) 
{
    char lat[8] = { '0', '1', '9', '0', '0', '0', '0', 'E' };
    span<char> s = lat;

    // in a complex implementation this would be in a function,
    // hence the desire for span<>
    std::cmatch match;
    std::regex_match(s.begin(), s.end(), match, std::regex("[0-9]+"));
}
尼古拉斯·霍尔特豪斯(Nicolas Holthaus)

问题是std::regex_match当迭代器类型为时不能解决函数重载,gsl::continuous_span_iterator因为std::cmatch使用aconst char*作为迭代器类型。无论std::smatch或者std::cmatch是在这种情况下,适当的,你需要自己的std::match_results类型。这是应该如何做:

#include <regex>
#include "gsl.h"

using namespace std;
using namespace gsl;

int main(int argc, const char **argv) 
{
    char lat[8] = { '0', '1', '9', '0', '0', '0', '0', 'E' };
    span<char> s = lat;
    std::match_results<decltype(s)::iterator> match;
    std::regex_match(s.begin(), s.end(), match, std::regex(".*"));
}

就是说,在撰写本文时,由于问题#271,修订后的迭代器方法仍然无法编译

在此问题解决之前,另一个解决方法是:

int main(int argc, const char **argv) 
{
    char lat[8] = { '0', '1', '9', '0', '0', '0', '0', 'E' };
    span<char> s = lat;
    std::cmatch match;
    std::regex_match(&s[0], &s[s.length_bytes()], match, std::regex(".*"));
}

解决方法涵盖了将相同或不同范围的跨度传递给函数的情况。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用gsl进行g ++编译:找不到库

来自分类Dev

在Windows上使用GSL(编译,链接等)。分步指南

来自分类Dev

gsl::span<T> and gsl::span<const T> overloads are ambigous

来自分类Dev

使用std :: span的泛型函数无法编译

来自分类Dev

虽然我已经安装了GSL库,但g ++无法编译我的代码

来自分类Dev

虽然我已经安装了GSL库,但g ++无法编译我的代码

来自分类Dev

使用Boost regex C ++进行编译

来自分类Dev

将cython与gsl结合使用

来自分类Dev

使用GSL的未知类型名称

来自分类Dev

将cython与gsl结合使用

来自分类Dev

使用GSL的非线性拟合

来自分类Dev

使用gsl的复数矩阵乘法

来自分类Dev

用于ARM的交叉编译GSL 1.16

来自分类Dev

std :: find()无法使用gcc进行编译

来自分类Dev

使用hmatrix-gsl-stats对随机分布进行采样时,如何提高RNG状态?

来自分类Dev

在范围-v3中使用gsl :: span

来自分类Dev

gsl_complex与std :: complex性能

来自分类Dev

gsl :: span <T>和gsl :: span <const T>重载不明确

来自分类Dev

为什么 gsl-library 在 11.10 中不编译/链接,尽管它在 11.04 下使用相同的 makefile 和程序?

来自分类Dev

使用类方法作为GSL QAGS的整数

来自分类Dev

在C ++中使用GSL对数函数

来自分类Dev

在C ++中使用GSL对数函数

来自分类Dev

如何在 Julia 中使用 GSL?

来自分类Dev

编译具有O3优化级别的GSL

来自分类Dev

无法使用Picocli进行编译

来自分类Dev

无法使用openmp进行编译

来自分类Dev

Eclipse for C++ 无法识别酿造的 GSL 和 Boost 库

来自分类Dev

使用提供的R函数使用gsl_function

来自分类Dev

如何使用GSL计算包含复数的椭圆积分?