

MT4を使って取得したデータを自作クラスに格納しております。

下記のコードでリストに設定後、リスト内のpositionProfitLossカラムでソートを行いたいのですが compare, sort
の方法をご教示いただけないでしょうか。

[code]

    class HogeClass:public CObject{
    public:
      string hogeId, hogeTime
      int amount, positionProfitLoss
    public:
      void
        以下省略
    }
    
    CList hogeList;
    
    void setToList(){
      HogeClass *hoge = new HogeClass(
        "posId1234"
        , "20201010"
        , 1000
        , -49
      );
      hogeList.Add(hoge);
    }
    
[/code]


CC BY-SA 4.0
2020-06-26T06:04:01.557
68023
2020-08-08T23:58:50.217
2020-08-08T23:58:50.217
15413
40831
question
c++
MT4の自作クラス(CList)をソートする方法


質問するときは環境に関する情報を詳しく記述しましょう。

  * [技術系メーリングリストで質問するときのパターン・ランゲージ](https://www.hyuki.com/writing/techask.html)

「MT4」というのが何なのかよく分かりませんが、おそらく「MetaTrader 4」のことだと仮定します。

MetaTrader
5のリファレンスを見る限り、[`CObject::Compare()`](https://www.mql5.com/en/docs/standardlibrary/cobject/cobjectcompare)をオーバーライドして、所望のメンバー変数を基に比較すれば、[`CList::Sort()`](https://www.mql5.com/en/docs/standardlibrary/datastructures/clist/clistsort)が使えるようになるのではないでしょうか。

[code]

    class Xxx : public CObject {
    ...
    public:
        virtual int Compare(const CObject* node, const int mode = 0) const override {
            // 引数 node から Xxx へのポインタを得る場合は、
            // static_cast または dynamic_cast でダウンキャストする。
            // this オブジェクトが node オブジェクトと等しい場合は 0 を返す。
            // this オブジェクトが node オブジェクトよりも小さい場合は -1 を返す。
            // this オブジェクトが node オブジェクトよりも大きい場合は 1 を返す。
            // 引数 mode が何なのかは不明。
        }
    };
    
[/code]

質問する前に、まずはリファレンスを読むようにしてください。大手ベンダー／零細ベンダー問わず、日本語版リファレンスは翻訳がおかしかったり、情報が古かったりするので、原文の英語版リファレンスを読んだほうが正確な情報を得られます。技術系の英文は高校レベルの知識があれば十分読めます。

ちなみにこのライブラリは一見古いMFC (Microsoft Foundation Classes)
に酷似していますが、それなりに経験を積んだC++プログラマーの立場から言わせてもらうと、全体的にかなりおかしな設計になっています。よほどの理由がない限り使わないほうがいいと思います。


CC BY-SA 4.0
2020-07-25T16:26:26.717
68963
2020-07-25T16:39:21.117
2020-07-25T16:39:21.117
15413
15413
68023
answer