Visual C++ 2010 で C++ TR1 ライブラリを使用するにはどうすればよいですか?
3 に答える
VS2010 には、いくつかの C++0x 機能が組み込まれています。TR1 の一部の機能 (数学関数など) は、TR1 の Visual C++ 実装には含まれていません。
boost には TR1 の実装があり、boostをダウンロードして入手できます。
VS2010 から C++0x/TR1 ヘッダーを無効にしてブースト実装を使用する_HAS_CPP0X=0
には、VS2010 プロジェクトのプロジェクト設定で定義します。
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);
}
GCC とは異なり、VC2010 の TR1 ヘッダーはTR1/
ディレクトリに隔離されていません。これは、VC を使用したからではなく、GCC の実装はこのように珍しいと誰かが私に言ったからです。
N1836 1.3/4:
標準ヘッダーの追加の宣言は、デフォルトで定義されていないマクロで保護するか、新しいヘッダーと非標準宣言を含む標準ヘッダーの並列バージョンの両方を含むすべての拡張ヘッダーを別のディレクトリに配置することをお勧めします。デフォルトの検索パスの一部ではありません。
したがって、 を追加する必要がある場合もあります#define
。彼らがこれを標準化しなかったのは残念です!