Регулярные выражения в c ++ STL - PullRequest
7 голосов
/ 17 января 2011

Есть ли в STL нативная библиотека, которая протестирована и работает без каких-либо дополнительных опций компилятора?Я пытался использовать <regex>, но компилятор выводит это:

В файле, включенном из /usr/include/c++/4.3/regex:40, из main.cpp: 5: / usr / include / c ++/4.3/c++0x_warning.h:36:2: error: #error Этот файл требует поддержки компилятора и библиотеки для будущего стандарта ISO C ++, C ++ 0x.Эта поддержка в настоящее время является экспериментальной и должна быть включена с помощью параметров компилятора -std = c ++ 0x или -std = gnu ++ 0x.

Ответы [ 3 ]

13 голосов
/ 17 января 2011

G ++ 4.3 (и, возможно, более поздние версии) просто следят за заголовочными файлами для максимального соответствия стандартам.

Если вы программируете на C ++ 98 (текущий стандарт, который был разработан длянекоторое время), затем в технический отчет 1 была добавлена ​​поддержка регулярных выражений, а файлы заголовка и находятся в специальном каталоге tr1, а содержимое - в специальном пространстве имен std::tr1.

.В новом стандарте C ++ 0x поддержка регулярных выражений была объединена со стандартной библиотекой, поэтому ее можно найти в заголовке regex и пространстве имен std.

G ++ гарантирует, что вы используете правильныеверсия для --std= версии, которую вы указали в командной строке, хотя внутренне они оба являются одной и той же реализацией.

Таким образом, чтобы регулярное выражение работало без переключения на --std=c++0x, просто

#include <tr1/regex>
5 голосов
/ 17 января 2011

Я почти уверен, что поддержка регулярных выражений была добавлена ​​в C ++ 0x, поэтому до сих пор не было STL-вещей, поддерживающих ее.Если вы не хотите использовать c ++ 0x, вы можете вместо этого использовать Boost, но этого нет в STL.

3 голосов
/ 17 января 2011

Вы можете попробовать использовать Boost.Regex вместо заголовков c ++ 0x.
Кроме того, STL - это не то же самое, что стандартная библиотека.Раньше это означало «Стандартная библиотека шаблонов», когда это было предложение SGI.Стандартная библиотека не принимает все в STL (веревка и slist) и охватывает гораздо больше места, чем STL (iostreams, все заголовки tr1, tr2 и c ++ 0x).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...