4

Visual C++ 2010 で C++ TR1 ライブラリを使用するにはどうすればよいですか?

4

3 に答える 3

5

VS2010 には、いくつかの C++0x 機能が組み込まれています。TR1 の一部の機能 (数学関数など) は、TR1 の Visual C++ 実装には含まれていません。

boost には TR1 の実装があり、boostをダウンロードして入手できます。

VS2010 から C++0x/TR1 ヘッダーを無効にしてブースト実装を使用する_HAS_CPP0X=0には、VS2010 プロジェクトのプロジェクト設定で定義します。

于 2010-09-09T19:23:33.957 に答える
4

VS10 に同梱されている TR1 の実装を使用する場合は、必要なヘッダーを #include するだけですぐに実行できます。すべての TR1 が TR1 の VS10 実装に含まれているわけではありません。TR1 (および C++0x 全体) のどの部分が工場提供の実装に含まれているかについては、こちらのリストを参照してください。MSDN のサンプル ページから抜粋した、VS10 で正規表現を使用する方法の簡単な例を次に示します。 :

// 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); 
    } 
于 2010-09-09T19:55:16.007 に答える
2

GCC とは異なり、VC2010 の TR1 ヘッダーはTR1/ディレクトリに隔離されていません。これは、VC を使用したからではなく、GCC の実装はこのように珍しいと誰かが私に言ったからです。

N1836 1.3/4:

標準ヘッダーの追加の宣言は、デフォルトで定義されていないマクロで保護するか、新しいヘッダーと非標準宣言を含む標準ヘッダーの並列バージョンの両方を含むすべての拡張ヘッダーを別のディレクトリに配置することをお勧めします。デフォルトの検索パスの一部ではありません。

したがって、 を追加する必要がある場合もあります#define。彼らがこれを標準化しなかったのは残念です!

于 2010-09-09T19:28:12.130 に答える