[英]C++ Including STL within header files
在頭文件中包含 STL 是壞主意還是好主意? 其中您將它們用作您自己定義的類的成員變量。
我的假設是,有些人真的希望他們創建的庫非常獨立於 C++ 標准庫。 因此,他們被迫再次重寫類似於 C++ STL 中可用功能的類型,而其他人則嘗試在其頭文件中轉發聲明稍后需要的類型。 其他人認為這是一種不好的做法,根本不是一個好主意。
如果我錯了,請糾正我(我知道的不多,這就是為什么一切都只是假設):
那么在前向聲明 STL 上可用的類型時,代碼可移植性(對於那些真正希望他們的代碼獨立於平台的人)有什么影響?(我只知道 MSDN 建議的一種類型的vector
可以被前向聲明,但是不能保證一直工作)。
如果我在頭文件中包含 STL,可能存在什么問題? 這會影響我的代碼的可移植性嗎?
如果我在我的 DLL 的頭文件中包含 STL 並將該 DLL 帶入其他計算機,我會遇到什么問題?
而且,你能給我一個啟示,為什么我應該(不應該)在我的標題中包含 STL?
使用 PIMPL 習慣用法在公開/導出 STL 類型的標頭上創建編譯防火牆: 詳細信息
class MyList{
public:
//Some functions
private:
std::vector<int> _content;
};
如果您在 Vs2012 中創建 MyList 但組件是在 VS2008 中構建的,那么 VS2008 中的代碼將期望按照 STL 2008 的內存布局,但布局將是 STL 2012 的布局。這將產生一系列問題。
那么在前向聲明 STL 上可用的類型時,代碼可移植性(對於那些真正希望他們的代碼獨立於平台的人)有什么影響?
始終使用標准 C++ 和標准庫是可移植性的標志。
如果我在頭文件中包含 STL,可能存在什么問題? 這會影響我的代碼的可移植性嗎?
也許更長的編譯時間? 再次,請參閱上面的答案。
如果我在我的 DLL 的頭文件中包含 STL 並將該 DLL 帶入其他計算機,我會遇到什么問題?
大多數情況下和 AFAIK,DLL 僅“存儲”您的類的方法定義。 您仍然需要在.h
文件中包含 STL 頭文件。
而且,你能給我一個啟示,為什么我應該(不應該)在我的標題中包含 STL?
你應該,因為你幾乎總是想使用 STL。 來到Lounge<C++> ,您一定會大開眼界。
如果您使用的是標准 C++ STL 庫,那么您可能不會遇到移植問題,因為 Microsoft Visual C++ 和 g++ 都支持這些。 除非您使用非標准 STL 標頭,否則您將遇到問題。
不惜一切代價避免標頭中的 STL:
STL 將如何改進以下 API? IDog 的消費者不需要知道狗的內部結構,只需要知道它會吠叫。
struct IDog
{
virtual void Bark() = 0;
virtual void Free() = 0;
}
IDog* CreateDog();
In your source code you might have
struct Dog: IDog
{
Dog() {...}
std::vector<VocalChord> vocalChords;
void Bark() override { Resonate(vocalChords); }
void Free() { delete this; }
};
IDog* CreateDog() { return new Dog(); }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.