8

ヘッダーには、ストリームへのポインターまたは参照のみが必要な場合に十分な<iostream>コンパニオンがあります。<iosfwd>後者は、をオーバーロードする場合の一般的なシナリオoperator<<です。

STLコンテナ用のそのようなヘッダーはありますか?<vector>STLコンテナを参照する関数をいくつか定義したいのですが、、、など<list>を含めたくありません<set>。al。それらのタイプへの参照を持つことができるように、全体として。この問題に対する標準、ブースト、またはその他の解決策はありますか?

4

4 に答える 4

4

STLコンテナ用のそのようなヘッダーはありますか?

いいえ、ありません。

この問題に対する標準、ブースト、またはその他の解決策はありますか?

私が知っていることではありません。

これらのヘッダーを含める必要があります。

于 2010-11-17T18:58:27.637 に答える
1

残念ながら、そうではありません。この標準<iosfwd>は、古い、テンプレート化されていないIOストリームライブラリ用に記述されたコードをサポートするための下位互換性のためにのみ導入されました。

于 2010-11-17T19:00:41.300 に答える
0

実際、テンプレートクラスの前方宣言ができないのはなぜですか?

どうしても回避策が必要な場合は、次のような方法で対処できます。

namespace std {

    template<typename T>
    class allocator;

    template<typename T, typename Alloc>
    class vector;
}

インクルードガードを追加し、「stdfwd.h」などとして保存します。

次に、このようなものは含まずに機能し<vector>ます:

void print(std::vector<int, std::allocator<int> >& v);

GCC4.5で私のために働いた。現時点では、宣言と定義にデフォルトの引数(テンプレート引数も)を同時に含めることができないという問題に対して、透過的な回避策を作成する方法がわかりません。しかし、それは可能かもしれません。ここから引き継ぐ?:)私はそれを本番コードでは使用しないと思いますが、興味深い演習のように見えます。

于 2010-11-17T19:35:49.427 に答える
-1

iosfwdを使用すると、テンプレートをインスタンス化する必要があるのはcharとwchar_tの2つのタイプしかないため、これを行うことができます。つまり、最終的に得られるのは、インスタンス化された具象型の前方宣言です。一方、STLコンテナはどのタイプでも機能すると想定されているため、STLヘッダーには明示的なものはありません。

于 2010-11-17T19:37:22.030 に答える