У меня определенно был успех. Сначала я использовал следующий код:
#include <boost/xpressive/xpressive.hpp>
#include <iostream>
using namespace std;
using namespace boost::xpressive;
//A simple regex test
int main()
{
std::string hello( "hello world!" );
sregex rex = sregex::compile( "(\\w+) (\\w+)!" );
smatch what;
if( regex_match( hello, what, rex ) )
{
std::cout << what[0] << '\n'; // whole match
std::cout << what[1] << '\n'; // first capture
std::cout << what[2] << '\n'; // second capture
}
return 0;
}
Это был просто привет мир от Boost Xpressive (см. Ссылку ниже). Сначала я скомпилировал с опцией -H
в gcc. Он показал огромный список заголовков, которые он использовал. Затем я взглянул на флаги компиляции, которые производила моя IDE (code :: blocks), и увидел что-то вроде этого:
g++ -Wall -fexceptions -g -c main.cpp -o obj/Debug/main.o
Поэтому я написал команду для компиляции файла Xpressive.hpp с точно такими же флагами:
sudo g++ -Wall -fexceptions -g /usr/local/include/boost/xpressive/xpressive.hpp
Я снова скомпилировал исходный код с -H
и получил следующий вывод:
g++ -Wall -fexceptions -H -g -c main.cpp -o obj/Debug/main.o
! /usr/local/include/boost/xpressive/xpressive.hpp.gch
main.cpp
. /usr/include/c++/4.4/iostream
.. /usr/include/c++/4.4/x86_64-linux-gnu/bits/c++config.h
.. /usr/include/c++/4.4/ostream
.. /usr/include/c++/4.4/istream
main.cpp
The! означает, что компилятор смог использовать предварительно скомпилированный заголовок. Символ х означает, что он не мог его использовать. Использование соответствующих флагов компилятора имеет решающее значение. Я снял -H и провел несколько тестов скорости. Предварительно скомпилированный заголовок улучшился с 14 до 11 секунд. Неплохо, но не отлично.
Примечание: вот ссылка на пример: http://www.boost.org/doc/libs/1_43_0/doc/html/xpressive/user_s_guide.html#boost_xpressive.user_s_guide.examples Я не смог заставить его работать в посте.
Кстати: я использую следующие g ++
g++ (Ubuntu 4.4.3-4ubuntu5) 4.4.3