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;
}
}
を、私はそう何を、私は私の元の形式を取得するために行うことができますか、それはスーパークラスのフォーマットだと、私は自分のマップに追加したら、それは良いのために消えて、これによる変換にエラーがありますか?
おかげで、私はあなたがあなたが多くの派生している場合は、「それは非常によくスケールしないと言って理解していなかった一つの選択肢は、このことだろうすべてをチェックする必要があります。 – Glolita
@Glolitaはあなたが多くの派生型を持っていたと想像してください。あなたはマップをループしてそれらのすべてをチェックする必要がありました。非常に効率的で優雅ではありません。ところで、あなたのFieldSequenceはフィールドの上に余分なメソッドを持っていると思いますか? – juanchopanza
はい、それは絶対にあります!じゃあどうすればいい ?各タイプのフィールドを独自のマップに在庫しますか? – Glolita