1

我注意到,当我在代码中使用 xp::sregex::compile 时,字符串 ...\3rdparty\boost-1_58\boost/xpressive/detail/core/matcher/regex_byref_matcher.hpp (带有我的本地路径)出现在二进制代码,在发行版中编译。有没有办法删除它?

4

1 回答 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 回答