在設計C++庫時,我認爲在公共接口中包含標準庫容器(如std::vector
)是一種不好的做法(請參閱,例如Implications of using std::vector in a dll exported function)。安全地在C++庫接口中使用容器
如果我想公開一個獲取或返回對象列表的函數,該怎麼辦?我可以使用一個簡單的數組,但是接下來我將不得不添加一個count
參數,這會使界面更加繁瑣且不太安全。例如,如果我想使用map
,它也不會有多大幫助。我猜像Qt這樣的庫定義了他們自己的容器,這些容器可以安全地導出,但我寧願不添加Qt作爲依賴項,並且我不想滾動自己的容器。
在庫接口中處理容器的最佳做法是什麼?是否有可能使用「膠水」的小容器實現(最好只有一個或兩個文件,我可以使用許可證)?或者,是否有一種方法可以使.DLL/.so界限和不同的編譯器可以安全地使用std::vector
等。
我建議「功能模板」,而不是「模板函數」? :) –