Использование Технического отчета C++ 1 (TR1) в VC++ 2010

Как использовать библиотеку C++ TR1 в Visual C++ 2010?

3 ответа

VS2010 поставляется с несколькими встроенными функциями C++0x. Некоторые функции TR1, такие как математические функции, не включены в реализацию TR1 в Visual C++.

Boost имеет реализацию TR1, вы можете получить его, загрузив Boost.

Чтобы отключить заголовки C++0x/TR1 от VS2010 и использовать реализацию boost, определите _HAS_CPP0X=0 в настройках проекта для вашего проекта VS2010.

Если вы хотите использовать реализацию TR1, поставляемую в комплекте с VS10, достаточно просто # включить нужные вам заголовки и начать работу. Не все TR1 включены в реализацию TR1 VS10. Вы можете найти список того, какие части TR1 (и C++0x в целом) включены в поставляемую фабрикой реализацию здесь, и вот упрощенный пример того, как использовать регулярные выражения в VS10, взятый из примера страницы MSDN:

// std_tr1__regex__regex_search.cpp 
// compile with: /EHsc 
#include <regex> 
#include <iostream> 

int main() 
    { 
    const char *first = "abcd"; 
    const char *last = first + strlen(first); 
    std::cmatch mr; 
    std::regex rx("abc"); 
    std::regex_constants::match_flag_type fl = 
        std::regex_constants::match_default; 

    std::cout << "search(f, f+1, \"abc\") == " << std::boolalpha 
        << regex_search(first, first + 1, rx, fl) << std::endl; 

    std::cout << "search(f, l, \"abc\") == " << std::boolalpha 
        << regex_search(first, last, mr, rx) << std::endl; 
    std::cout << "  matched: \"" << mr.str() << "\"" << std::endl; 

    std::cout << "search(\"a\", \"abc\") == " << std::boolalpha 
        << regex_search("a", rx) << std::endl; 

    std::cout << "search(\"xabcd\", \"abc\") == " << std::boolalpha 
        << regex_search("xabcd", mr, rx) << std::endl; 
    std::cout << "  matched: \"" << mr.str() << "\"" << std::endl; 

    std::cout << "search(string, \"abc\") == " << std::boolalpha 
        << regex_search(std::string("a"), rx) << std::endl; 

    std::string str("abcabc"); 
    std::match_results<std::string::const_iterator> mr2; 
    std::cout << "search(string, \"abc\") == " << std::boolalpha 
        << regex_search(str, mr2, rx) << std::endl; 
    std::cout << "  matched: \"" << mr2.str() << "\"" << std::endl; 

    return (0); 
    } 

В отличие от GCC, заголовки TR1 в VC2010 не изолируются в TR1/ каталог. Я знаю это не из-за использования VC, а потому, что кто-то сказал мне, что реализация GCC необычна в этом смысле.

N1836 1,3/4:

Рекомендуется либо защитить дополнительные объявления в стандартных заголовках макросом, который не определен по умолчанию, либо поместить все расширенные заголовки, включая как новые заголовки, так и параллельные версии стандартных заголовков с нестандартными объявлениями, в отдельный каталог, который не является частью пути поиска по умолчанию.

Таким образом, вам также может понадобиться добавить #define, К сожалению, они не стандартизировали это!

Другие вопросы по тегам