私は今、いくつかのフィールドで構成されるメッセージオブジェクトがあるこの状況に対処しているので、クラス Field のオブジェクトでそれをロードするマップがあります:
std::map<int,Field*> myMsg;
しかし、私のプロトコルでは、フィールドはシーケンスを型として持つことができるので、Field クラスから継承する FieldSequence クラスを作成し、それをメッセージに追加するために次のようにしました。
FieldSequence* seqFld=new FieldSequence(sequence);
myMsg[seqFld->id]=seqFld;
しかし、その後、フィールドを元のシーケンス形式で取得する必要がありました。これは、id 属性が 0 値に設定されていることを確認しています。だから私はこれをしました:
std::map<int,Field*>::iterator it;
for ( it=myMsg.begin() ; it != myMsg.end(); it++ )
{
cout << "field id => " << (*it).first << endl;
int idprm=((*it).second)->id;
if(idprm==0)
{
FieldSequence* temp=(*it).second;
}
}
しかし、この変換が原因でエラーが発生しました。元の形式を取得するにはどうすればよいですか、それともスーパークラス形式であるため、マップに追加すると完全に失われますか?