protobuf メッセージの解析を含むライブラリを作成しています。ライブラリはどのメッセージに使用されるかを認識できないため、google::protobuf::DynamicMessageFactory
.
ただし、解析されたメッセージを、実際のメッセージの種類を知っているプログラムの他の部分に戻すことができるようにしたいと考えています。
言い換えれば、
同じ質問const google::protobuf Message*
です。解析後、メッセージが実際には a であることがわかります(そして、プログラムはクラスについて知っています)。どうにかしてを aに変換できますか?google::protobuf::compiler::Importer
google::protobuf::DynamicMessageFactory
TestMessage
Message*
TestMessage
メッセージを単純化することはできません。メッセージがジェネラルで解析された場合、dynamic_cast
キャストの結果は常に、これらのメソッドがある種のプロキシ オブジェクトを返すだけで、実際のメッセージ クラスについて知ることができないためです。NULL
Message::ParseFromXXX
私も次のことを試しました:
//message is a const google::protobuf::Message* parsed using DynamicMessageFactory
TestMessage *tr = new TestMessage;
tr->CopyFrom( *message );
しかし、それはprotobufが「異なるタイプのメッセージをマージしようとしています」と言って失敗します。tr->GetTypeName()
とmessage->GetTypeName()
do は同じ型名を返すことに注意してください 。
助けてくれてありがとう