ヘッダーファイルでSTLコンテナーを転送宣言することはできますか?たとえば、次のコードを見てください。
#include <vector>
class Foo
{
private:
std::vector<int> container_;
...
};
私はこのようなことができるようになりたいです:
namespace std
{
template <typename T> class vector;
}
class Foo
{
private:
std::vector<int> container_;
...
};
これはできますか?
vector
名前空間でstd
を宣言すると、未定義の動作になります。したがって、コードは機能する可能性がありますが、機能しない可能性もあります。コンパイラは、試行が機能しない場合に通知する義務を負いません。それは賭けであり、標準のC++ヘッダーのインクルードを回避することがその価値があることを私は知りません。
次のcomp.std.c ++。moderatedの説明を参照してください。
コンパイラがcontainer_
オブジェクトに割り当てる容量を知る方法がないため、私はそうは思いません。せいぜいあなたはできるでしょう:
std::vector<int> *container_;
コンパイラーはポインターのサイズを認識しているため、コンストラクターに新しく追加します。
他の人が言ったこととは別に、iostreamといくつかの関連するテンプレートを前方宣言する認可された方法があることを知っておくと便利かもしれません:ヘッダー<iosfwd>
。標準にそのようなヘッダーがもっとあると便利です。