[英]how to not include boost header file in my own header file
我在上課
在課堂上,我將boost :: graph :: adjacent_list用作私有成員。
但我不希望我的頭文件包含boost頭文件,因為任何其他包含我的頭文件的文件都需要包含boost頭文件。
有沒有一種方法可以避免在我自己的頭文件中包含boost頭文件。
我已經嘗試過向前聲明,但是失敗了。
您不能直接執行此操作,但是您可以通過對類進行pimpl
來解決不傳播實現細節(提升)的潛在問題。 從本質上講,這意味着您向前聲明一個指向實現細節的指針,然后僅在源文件中完全實現這些細節。
如果您的頭文件僅是定義文件,並且已在cpp文件中完全實現(即,頭文件對boost::graph::adjacent_list
無效,則可以在頭文件中進行操作)
bgalWrapper
結構。 boost::graph::adjacent_list
bgalWrapper
結構(僅具有boost::graph::adjacent_list
成員) 現在,每個類都可以對boost項目進行引用,而標題無需了解boost。
這種模式可能有一個名稱(和維基頁面),但是距我認真編程C ++已經有好幾年了。
希望這可以幫助。
更新我所描述的是PIMPL慣用語的部分實現
謝謝馬克B
我沒有測試它,但是您不能將列表定義為指針變量嗎? 然后,前向聲明應該成功。 但是,您必須嵌套名稱空間:
using namespace boost::graph;
class adjacent_list;
class MyClass {
private adjacent_list<foo, bar> m_list;
}
也許:
namespace boost {
namespace graph {
class adjacent_list;
}
}
class MyClass {
private adjacent_list<foo, bar> m_list;
}
然后在實現文件中,將其用作指針:
#include <boost/graph/adj_list_serialize.hpp>
MyClass::MyClass() {
m_list = new adjacency_list<foo, bar>();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.