2012-03-19 6 views
0

私はこのようなstd名前空間を再定義されるSTLportライブラリーと呼ばれる、使用しています:このための名前が変更された元の名前空間に戻すにはどうすればいいですか?

# if defined (_STLP_REDEFINE_STD) 
/* We redefine "std" to "stlport", so that user code may use std:: transparently */ 
# undef std 
# define std STLPORT 
# else 

、私はstd::somethingを使用しようと、これまでの私のコードでは、それが_STLP::somethingで置換されています。

#define std STLPORT行をコメントアウトすると、レガシープロジェクトのコードはコンパイルされません(stlportに依存します)。

私が行をコメントアウトしないと、追加しようとしている新しいライブラリは、std::とstlportが使用するものとは異なるアロケータセットを使用してコンパイルされません。タイプの衝突。

新しいライブラリを追加する直前に#define STLPORT stdを試しましたが、この#defineは機能していないようです。

stdは、このように再定義されると通常の方法を使用できますか?

# if defined (_STLP_REDEFINE_STD) 
# undef std 
# define std STLPORT 
# else 

//.... 

#ifdef std 
#define std_WAS_DEFINED 
#undef std 
#endif 

//new code 

#ifdef std_WAS_DEFINED 
#define std STLPORT 
#endif 

//legacy code 

答えて

1

あなたはSTLの二つの異なる実装、STLportの内の1つの標準ライブラリにあるものを持っている:

+0

標準のコンテナを交換する必要はありませんが、 '-I'を使用する場合は、ソリューション内の別のプロジェクトの一部として新しいコードを保存する必要があります。私は古いコードと同じプロジェクトで新しいコードを使用することはできませんか?私はこの問題を1ヶ月間抱えていましたが、あなたの答えはそのような救済策を与えました!ありがとうございました!私が次に試してみたいのは、stlportをstdに置き換える '/ D'でした。 – Nav

+0

私はそれほどVisual Studioに慣れていません。おそらく、最も簡単な解決策は、異なるプロジェクトに古いコードと新しいコードを残すことです。わかりません。 –

1

次のようなものを使用することができます。古いコードにはSTLPORTが必要で、新しいコードには標準ライブラリが必要です。 include <vector>よう

新旧両方のコード使用のものは、彼らは異なるvectorという名前のファイル、ひいては異なる-Iコンパイラフラグを含める必要があります。同じコンパイラ設定でコンパイルすることはできません。

標準コンテナと他のSTL関連のデータを古いコードと新しいコードとの間で交換する必要がない場合は、古いコードをSTLPORT設定と新しいコードを通常の設定でコンパイルできます。 STLPORTには触れないでください。コードにstdを再定義しないでください。 STLPORTはそのように使うつもりはありません。これは、標準ライブラリ(の一部)のドロップイン代替品として意図されています。あなたはあなたの(またはSTLPORT)ソースを変更するのではなく、適切なコンパイラフラグを選択することによってどちらを使うかを選択します。

古いコードと新しいコードの間で標準のコンテナを交換する必要がある場合は、運が悪いです。あなたの唯一の手段は、レガシーコードを標準に準拠するように変更することです。

+0

'#undef std'が動作しましたが、' std'には何も含まれていないと思います。 \t * 59 \t IntelliSense:#include * "C:\を使用するまで、IntelliSense:namespace" std "にメンバ" vector "*がありません。 Program Files \ Microsoft Visual Studio 10.0 \ VC \ include \ vector "とエラーが消えてしまいました。 'std'名前空間全体を戻す方法はありますか?または、名前空間に含まれるものを見る方法? – Nav

+1

@Nav実際にコンパイルしましたか? Intellisenseはコンパイラではありません。 –

+0

私は知っている...私はコンパイルしてコンパイルエラーはありませんでしたが、私の質問が残っています。 – Nav

関連する問題