簡體   English   中英

返回任何/未知類型 c++

[英]Return any / unknown type c++

我正在嘗試在 c++ 中實現msgpack (json 替代方案),並正在創建一個迭代器 class 來循環遍歷我的字節數組,該數組基於某些標頭分隔。 那么迭代器將如何構造並返回任何類型,例如。 vector<int>map<int, string>std::anystd::variant是唯一的方法嗎? (我不想使用提升)。

到目前為止我的代碼https://github.com/t348575/msgpack

您想要做的事情有不同的方法,每種方法都有自己的要求和缺點。

解決方案 1:用戶在編譯時就知道序列化數據是什么樣子只需編寫一個模板 function 接受一個類型並嘗試對其進行反序列化。 檢查二進制 blob 的運行時類型信息,如果類型不匹配則拋出異常。

解決方案 2:用戶知道可能的類型集,std::variant 方法:利用訪問者模式。 您可以查看變體的界面以了解詳細信息。

解決方案 3:用戶不知道會出現什么類型:您在這里很不走運。 你需要制作像 std::any 這樣的東西,它本質上是一個美化的 void*。

C++ 被設計為靜態類型語言。 因此,您要完成的工作(讓 function 返回類型確定的運行時)預計是一場斗爭:)。 我個人會避免這種方法。

std::variant 是一種解決方案,但它只會導致客戶端在大 case 語句中探測每個返回值的內容; 或隨后從訪問者模式中獲得回調。 兩者都不是從解析器獲取 output 的最佳方法。

我會看看好的 C++ JSON 解析器,看看它們如何解決序列化/反序列化,例如https://github.com/nlo

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM