2017-02-24 10 views
0
CCommand<CAccessor<CMyClass> > rsDetails; 
    rsDetails.m_IdxPrj = pDoc->m_dbId; 
    if (rsDetails.Open(session) == S_OK) 
    { 
     rsDetails.ClearRecord(); 
     if (rsDetails.MoveNext() == S_OK) 
     { 
      CMyClassBase* data = ? 
     } 
    } 

私はCCommandのCAccessorを使用してデータのロードを取得している上記のコードに似たものがあります。私は、paramマップや列マップなどを処理するクラスを持っていて、その中に変数を持つ親/基本クラスを持っています。CCommand CAccessorからオブジェクトへのポインタ/参照を取得したい

私はC++に慣れていないので、「明白」と思われるものが見つからない場合は謝罪しますが、MyClassまたはMyClassBaseへのポインタ/参照を取得する方法を理解できませんそれをさらに処理するための関数に渡します。

ご協力いただければ幸いです。

答えて

0
CMyClassBase* details = dynamic_cast<CMyClassBase*>(rsDetails.m_pAccessor); 

これはかなり明白でした。 ..これは良い解決策ではない場合、またはより良い解決策がある場合は、私に知らせてください。

+0

Cスタイルのキャストに続いて 'dynamic_cast'を使用する理由は何ですか? 'dynamic_cast'があなたを守ろうとしているCスタイルのキャストが壊れます。なぜあなたのコードが動作するのか分からなければ、それはしません。 – IInspectable

+0

私はそれを見て、m_pAccessorはCMyClassです、私はちょうどそのように識別しなければなりませんでした...ダイナミックなアップキャストは親クラスです。私はどこでこれを誤解したのですか? – RazorUK84

+0

...大丈夫だから、Cスタイルのキャストを取り除いてアクセサーをベースにまっすぐにキャストすることができるようになりました。私はコーナーを切ることができると想定したくなかったし、ダイナミックキャストがそれに対して十分に巧妙であることを知らなかった。これを指摘していただきありがとうございます。 – RazorUK84