主要观点:在 C 语言中使用 C++标准库中的std::regex
,通过设计 C 接口来隐藏 C++机制并驯服它,示例展示了如何在 C 中使用std::regex
以及 C++端的实现细节,包括替换new
和delete
、通过线程局部变量传递 arena 等,同时提到了一些使用该库的注意事项和缺点。
关键信息:
- C 接口
regex.h
定义了regex_new
和regex_match
等函数,使用非空终止字符串和 arena 分配。 - C++端通过替换
new
和delete
将分配改为从 arena 进行,通过线程局部变量perm
传递 arena,regex_new
和regex_match
函数在 C++中构造和匹配std::regex
。 - 示例展示了如何在 C 中使用该库进行正则表达式匹配,以及在循环中使用 arena 自动释放内存。
- 提到使用 DEF 文件来导出 C 接口,不同编译器的构建命令不同。
- 指出该库的一些缺点,如无 Unicode 支持、
std::regex
实现普遍较差且慢、libstdc++编译慢、隔离在 DLL 中不便、DLL 大小等。
重要细节:
- 全局替换
new
和delete
时需考虑 C++17 的多种变体。 - 替换
delete
时可根据需要选择是否释放对象。 - 在 C++中构造
std::regex
时使用输入的两端作为迭代器。 - 在 C 中捕获
std::regex
的异常并返回空值。 - 在 C++中创建
cregex
迭代器时需注意是否复制。 - 通过
peports
查看 DLL 导出的函数。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。