実装でtypedefによって設定される不完全な型へのポインタを宣言する方法はありますか?ここで不完全な型のtypedefへのポインタ
は、私が何をしたいのですexemple:
#ifndef TEST_H
#define TEST_H
namespace std {
class string; // THIS WON'T WORK!
}
struct Test {
std::string *value;
};
#endif
文字列がのbasic_stringへのtypedefであるので、exempleのコードは動作しません。不完全な型のstd :: basic_stringを宣言できますが、回避策のように見えます。
私は、コンパイラがtypedefのシンボルを生成しないことを知っています。異なるファイルの異なる型のtypedefで同じ名前を使うことができます。しかしポインタは(少なくともコンパイラにとって)ポインタなので、そのようなことをすることは可能です。
EDIT:これはちょっとした作業例です。私の本当の問題では、ファサードだけが知っている必要があるライブラリのクラスを使用するFacadeがあります(いいえ、std :: stringではなく、ライブラリはstlではありません)。私は実際には循環的なインクルージョンが心配ではありませんが、プロジェクトの多くのファイルにこのファサードが(直接的または間接的に)含まれているため、コンパイル時に心配していますので、ライブラリファイルをFacadeの実装ファイルにのみ入れたい。
多くのコンパイラは、「」を提供しています。 –