我知道該怎麼做一個不透明物體在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; }
實際的類的我的源代碼,甚至更多的是模板比這個例子(4個參數模板的其中一些其本身的模板類的)。由於my_class.hpp在我的項目中無處不在,所以一般編譯需要很長時間(每個cpp文件包含my_class.hpp需要5秒),所以我想避免包含opaque_object.hpp,template_class。 hpp ...在my_class.hpp中。
這怎麼辦?任何評論,或想法做它都是受歡迎的。 預先感謝您的時間。
有人可能會添加不透明指針到帖子標誌(我沒有足夠的聲望來自己做)。先謝謝你! – Phong 2010-02-02 14:59:19
我認爲這個標籤效果更好,並且它已經存在。對不起,dirkgently :) – GManNickG 2010-02-02 15:03:29
@GMan:從維基百科pimpl成語直接重定向到不透明的指針!但它也被稱爲「句柄類」,「Pimpl成語」,「編譯器防火牆慣用語」或「Cheshire貓」。 (第一次聽說我生命中的pimpl習語,謝謝分享) – Phong 2010-02-02 15:08:02