Exprtk中是否有内置方法使用宽(16位)字符字符串?
Exprtk宽字符字符串支持问题解答
Exprtk没有原生内置的宽字符(16位)字符串支持,官方当前的核心实现基于单字节char类型设计,也没有提供类似#define UseWchar这类预编译开关来直接启用宽字符模式。
针对你不想每次更新都手动修改源码的需求,这里提供几个更稳妥的替代方案:
封装字符串转换适配层:在你的业务代码里添加宽字符与多字节字符串的转换逻辑,调用Exprtk接口时自动完成转换。比如:
#include <string> #include <locale> #include <codecvt> std::string wstring_to_string(const std::wstring& wstr) { std::wstring_convert<std::codecvt_utf8<wchar_t>> converter; return converter.to_bytes(wstr); } std::wstring string_to_wstring(const std::string& str) { std::wstring_convert<std::codecvt_utf8<wchar_t>> converter; return converter.from_bytes(str); }之后所有需要传递给Exprtk的宽字符字符串,先转成
std::string传入;从Exprtk获取的字符串结果,再转回std::wstring即可,完全不用修改Exprtk源码。维护本地补丁文件:如果必须依赖修改Exprtk源码的实现,可以把你的修改内容生成Git补丁。比如修改完
exprtk.hpp后,执行:git diff exprtk.hpp > exprtk_wchar_patch.patch每次更新Exprtk的
exprtk.hpp后,只需执行patch exprtk.hpp exprtk_wchar_patch.patch就能自动应用所有修改,省去手动逐行修改的麻烦。向官方提交功能请求:如果这个需求有一定普遍性,可以到Exprtk的官方代码仓库提交Issue,提议添加
UseWchar这类预编译宏的支持,推动官方原生实现宽字符适配,一劳永逸解决版本更新带来的重复修改问题。
内容的提问来源于stack exchange,提问作者DuxburyDutch
相关产品推荐
相关产品推荐

