3

名前空間オプションを使用したブーストbcpは、リストされているモジュールのインクルードと定義の名前を変更することを意図していたという印象を受けました。ツールを実行して出力を調べると、そうではないようです。エンドユーザーがバージョンの競合を引き起こさないこと#include <boost/*>を期待している場合、これらを再配布するにはどうすればよいですか? #include <boost/*>これらを名前空間クロージャでラップするだけですか?

次の bcp コマンドを使用しました。

.\boost_1_53_0\dist\bin\bcp.exe --boost=boost_1_53_0 --namespace=myboost --namespace-alias smart_ptr filesystem array.hpp container move ptr_container algorithm/string.hpp tokenizer.hpp thread chrono atomic foreach.hpp build myboost

ファイルを簡単に grep すると、次のようになります。

[boost]grep -e "boost/" algorithm\string.hpp
grep -e "boost/" algorithm\string.hpp
#include <boost/algorithm/string/std_containers_traits.hpp>
#include <boost/algorithm/string/trim.hpp>
#include <boost/algorithm/string/case_conv.hpp>
#include <boost/algorithm/string/predicate.hpp>
#include <boost/algorithm/string/find.hpp>
#include <boost/algorithm/string/split.hpp>
#include <boost/algorithm/string/join.hpp>
#include <boost/algorithm/string/replace.hpp>
#include <boost/algorithm/string/erase.hpp>
#include <boost/algorithm/string/classification.hpp>
#include <boost/algorithm/string/find_iterator.hpp>

これは、名前空間オプションを使用した bcp ツールの使用例であると確信していますが、一般的な C++ の概念/使用法を明らかに誤解していますよね? それとも、ツールの使い方が間違っているのでしょうか?

洞察をお寄せいただきありがとうございます。

4

2 に答える 2

3

bcp --namespace=myboost --namespace-alias regex config build /foo

完全な正規表現ライブラリ (libs/regex 内) と構成ライブラリ (libs/config) およびビルド システム (tools/build) をすべての依存関係を含めて /foo にコピーします。また、boost 名前空間の名前を myboost に変更し、バイナリ ライブラリのファイル名を「boost」ではなく「myboost」というプレフィックスで始まるように変更します。--namespace-alias オプションは、名前空間を新しい名前のエイリアスに昇格させます。

ヘッダー ファイルではなく、バイナリのみが名前変更されます (libboost_regex.soになります)。libmyboost_regex.soまた、namespaceboostは に置き換えられますmyboost(および のboostエイリアスになりますmyboost)。

于 2013-06-14T06:36:48.250 に答える
0

名前が示すように、名前空間とライブラリ ファイル (つまり .dlls と .libs)の名前を変更しますが、ヘッダーが存在するディレクトリは変更せず、したがってインクルードも変更しません

Boost ライブラリは通常、namespace boost. bcp を使用して、その名前空間を に変更しましたmyboost。たとえば、次のコードが有効になります。

#include <boost/sharedptr.hpp> //header directories haven't changed

myboost::shared_ptr<int> pi = myboost::make_shared<int>(5); //but the namespace has

のエイリアスになっているため、namespace boost--namespace-aliasを引き続き使用できます。boostmyboost

boost::shared_ptr<int> pi; //ok, this is in fact a myboost::shared_ptr

ドキュメントの例を参照してください: http://www.boost.org/doc/libs/1_53_0/tools/bcp/doc/html/index.html

于 2013-06-14T06:37:24.037 に答える