我注意到,当我在代码中使用 xp::sregex::compile 时,字符串 ...\3rdparty\boost-1_58\boost/xpressive/detail/core/matcher/regex_byref_matcher.hpp (带有我的本地路径)出现在二进制代码,在发行版中编译。有没有办法删除它?
问问题
27 次
1 回答
1
毫无疑问,这是代码__FILE__
用来获取漂亮的断言/异常消息的时候。
Xpressive 直接使用它的唯一地方是regex_error.hpp
:
#define BOOST_XPR_ENSURE_(pred, code, msg) \
boost::xpressive::detail::ensure_(!!(pred), code, msg, BOOST_CURRENT_FUNCTION, __FILE__, __LINE__) \
/**/
你可以很容易地破解它
#include <boost/xpressive/regex_error.hpp>
#undef BOOST_XPR_ENSURE_
#define BOOST_XPR_ENSURE_(pred, code, msg) \
boost::xpressive::detail::ensure_(!!(pred), code, msg, BOOST_CURRENT_FUNCTION, "(source-hidden)", __LINE__) \
/**/
记住:
- hack 需要在任何其他Xpressive 包括之前进行
- 这将限制消息的有用性,如果它们发生
- Xpressive 所依赖的库之一有可能使用类似的结构
于 2016-03-01T13:39:27.330 回答