2016-03-01 4 views
1

Я заметил, что когда я использую xp :: sregex :: compile в моем коде, строка ... \ 3rdparty \ boost-1_58 \ boost/xpressive/detail/core/matcher/regex_byref_matcher.hpp (с моим локальным путем) появляется в двоичном коде, скомпилированном в моделях релиза. Есть ли способ удалить его?path of regex_byref_matcher.hpp при использовании xp :: sregex :: compile

ответ

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 to go до любых других Xpressive включает
  • это ограничит полезность сообщений, если они происходят
  • есть вероятность того, что одна из библиотек, которые Xpressive зависит от того, использует подобные конструкции
+0

пожалуйста, напишите [SSCCE] (Http: // sscce.org/)/[MCVE](http://stackoverflow.com/help/mcve) – sehe

+0

Спасибо, это имеет смысл, я пробовал, но я все еще получаю путь от regex_byref_matcher.hpp в двоичном формате, Вместо этого вы увидите строку «source-hidden». Также он скомпилировался успешно только с undef, поэтому он действительно не встречал этот макрос. – user3136169

+0

Теперь я немного смущен. Вы решили это? – sehe