匯出包含std:: 等複雜類型的類別時vector 或std::map,必須提供DLL 介面以確保客戶端可以存取這些成員。這意味著將類別聲明為 DLL_EXPORT 並將成員函數和物件標記為 DLL_EXPORT 以允許外部存取。
警告 C4251 表示複雜型別成員沒有DLL 介面。使用 std:: 容器類型時可能會發生這種情況,因為編譯器無法完全確定客戶端將存取哪些方法。
儘管使用 向前宣告範本類別DLL_EXPORT 可能看起來抑制了警告,但它實際上並沒有在編譯期間為成員函式註入 DLL_EXPORT。它只是在當前編譯單元內觸發其實例化。
使用 DLL_EXPORT 的前向聲明並不能完全解決警告。對於必須由客戶端存取的成員,這種間接可能會出現問題,可能會阻止內聯優化。
在某些情況下,停用標準容器的警告可能是合理的標準容器(如果它們可透過共用程式庫標頭提供給客戶端和DLL) 。然而,這需要仔細考慮賦值運算子和複製建構函數的潛在問題。
在 DLL 介面中使用標準容器可能會出現問題,因為需要每個潛在的客戶端可存取方法的 DLL 介面。作為替代方案,最好將容器的使用封裝在非匯出的幫助程式類別中,或考慮使用靜態庫。
以上是如何從 DLL 安全匯出包含 std:: 物件的類別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!