[英]Convert message parsed via `DynamicMessageFactory` to concrete subtype
我正在創建一個包含protobuf消息解析的庫。 由於該庫無法確定將使用哪些消息,因此它使用google::protobuf::DynamicMessageFactory
解析消息。
但是,我希望能夠將解析的消息傳遞回程序的其他部分,這些部分知道實際的消息類型。
換句話說,同樣的問題:我有一個通過google::protobuf::compiler::Importer
和google::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.