私は次のようにC++で不透明なオブジェクトを作成する方法を知っています:
// my_class.hpp
class opaque_object;
class my_class {
my_class();
~my_class();
opaque_object *m_opaque_object;
};
// my_class.cpp
#include <my_class.hpp>
class opaque_object {
// ...
};
my_class::my_class() { m_opaque_object = new opaque_object(); }
my_class::~my_class() {delete m_opaque_object; }
次に、不透明なオブジェクトが、この名前空間のヘッダーファイルを含めずに、別の名前空間にある既存のクラステンプレートである場合にそれを行う方法を説明します。次のコードは良くありません、それは私の問題を説明するためにここにあります。
// my_class.hpp
class third::party::library::opaque_object<
third::party::library::templated_class>;
class my_class {
my_class();
~my_class();
third::party::library::opaque_object<
third::party::library::templated_class> *m_opaque_object;
};
// my_class.cpp
#include <my_class.hpp>
#include <third/party/library/opaque_object.hpp>
#include <third/party/library/template_class.hpp>
typedef third::party::library::opaque_object<
third::party::library::templated_class> opaque_object;
my_class::my_class() { m_opaque_object = new opaque_object(); }
my_class::~my_class() {delete m_opaque_object; }
私のソースコードの実際のクラスは、この例よりもさらにテンプレート化されています(templateの4つの引数と、それ自体がテンプレート化されたクラスであるものもあります)。
my_class.hppは私のプロジェクトのどこでも使用されているため、一般的なコンパイルには多くの時間がかかります(各cppファイルにmy_class.hppを含めるのに5秒かかります)。したがって、opaque_object.hpp、template_class.hpp ... my_class.hppにあります。
これはどのように行うことができますか?コメントやアイデアは大歓迎です。よろしくお願いします。