首頁 > 後端開發 > C++ > 主體

如何實現標識符的強類型化,同時保持與地圖等容器的兼容性?

Mary-Kate Olsen
發布: 2024-11-21 02:22:15
原創
916 人瀏覽過

How can I achieve strong typing for identifiers while maintaining compatibility with containers like maps?

使用usings 和typedef 進行強類型化

在程式設計中,強型別可以確保資料依照其定義的型別處理,從而防止因錯誤而導致的錯誤意外的類型轉換。本問題重點在於在專案中實現標識符的強類型化,同時保留與地圖等容器的功能和相容性。

使用結構來強制類型約束

滿足這些要求,可以使用基於結構的解決方案。提供的程式碼定義了結構體 (string_id),該結構體透過使用標籤封裝帶有新增類型資訊的字串值。這些標籤對於每種類型的識別碼都是唯一的,例如portal_tag 或cake_tag。這樣可以進行類型安全的比較,並確保不同類型的識別碼不能相互分配。

用法範例

using PortalId = string_id<portal_tag>;
using CakeId = string_id<cake_tag>;

PortalId portal_id("2");
CakeId cake_id("is a lie");

// OK, same type
std::map<CakeId, PortalId> p_to_cake; 

// OK, converting a PortalId to a CakeId
std::unordered_map<CakeId, PortalId> hashed_ptocake;
hashed_ptocake.emplace(CakeId("foo"), PortalId("bar"));

// Compiler error, mixing types
p_to_cake[portal_id] = cake_id; // COMPILER ERROR
登入後複製

其他功能

程式碼的改進版本增加了雜湊映射、串流傳輸到ostream 以及自訂字串轉換的功能。這使得可以在廣泛的上下文中無縫使用類型安全性標識符。

結論

該解決方案有效地實現了標識符的強類型化,同時保留了它們在容器中的可用性。透過利用結構和標籤,它強制執行類型約束,防止類型不匹配引起的錯誤。包含的功能提供了更多的多功能性,並有助於無縫整合到現有的程式碼庫中。

以上是如何實現標識符的強類型化,同時保持與地圖等容器的兼容性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板