簡體   English   中英

將通過“ DynamicMessageFactory”解析的消息轉換為具體的子類型

[英]Convert message parsed via `DynamicMessageFactory` to concrete subtype

我正在創建一個包含protobuf消息解析的庫。 由於該庫無法確定將使用哪些消息,因此它使用google::protobuf::DynamicMessageFactory解析消息。

但是,我希望能夠將解析的消息傳遞回程序的其他部分,這些部分知道實際的消息類型。

換句話說,同樣的問題:我有一個通過google::protobuf::compiler::Importergoogle::protobuf::DynamicMessageFactory創建的const google::protobuf Message* 解析之后,我就知道該消息實際上是一個TestMessage (並且程序知道該類),我可以將Message*轉換為TestMessage嗎?

我不能簡單地dynamic_cast消息,如果消息是用通用的Message::ParseFromXXX解析的,則轉換的結果始終為NULL ,因為我猜這是因為這些方法僅返回某種代理對象,並且不知道實際消息類。

我也嘗試了以下方法:

//message is a const google::protobuf::Message* parsed using DynamicMessageFactory
TestMessage *tr = new TestMessage;
tr->CopyFrom( *message );

但這以protobuf說“試圖合並不同類型的消息”失敗。 請注意, tr->GetTypeName()message->GetTypeName()確實返回相同的類型名稱。

我很感謝你的幫助

TestMessage實際上是否從Message繼承? dynamic_cast返回null的事實表明它沒有,這意味着這些類是不相關的,並且嘗試從一個類轉換為另一個類是沒有意義的。 或者,它使用私有繼承。

暫無
暫無

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

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