我编写了一个 Ruby C++ 扩展来包装Google 的 re2 正则表达式库,但最近对该库的更新将函数的接口Match()
从:
bool Match(const StringPiece& text,
int startpos,
Anchor anchor,
StringPiece *match,
int nmatch) const;
到:
bool Match(const StringPiece& text,
int startpos,
int endpos,
Anchor anchor,
StringPiece *match,
int nmatch) const;
(注意新的int endpos
论点。)
我的问题是:尽管 re2 似乎没有指定任何VERSION
我可以自省的常量,我是否有可能在一个扩展中支持这个库的两个版本?
理想情况下,我希望能够尝试较新的版本(带有 6 个参数),如果失败,则回退到旧版本(因为我能够endpos
轻松地回填参数)。
目前我的代码是这样的:
matched = p->pattern->Match(text_as_string_piece, 0, (int)RSTRING_LEN(text), RE2::UNANCHORED, 0, 0);
但如果你有旧版本的 re2,它需要是:
matched = p->pattern->Match(text_as_string_piece, 0, RE2::UNANCHORED, 0, 0);