CObjectでCompare()をオーバーライドして、CList sort()を動作させるには? - ページ 3 1234 新しいコメント Alain Verleyen 2017.09.04 14:16 #21 Gustavo Hennemann:こんにちは、@Alain Verleyen です。getPrice()メソッドを変更し、CopyClose()の代わりにCopyBuffer()を使っています。これは、主な目的を変更するものではありません。そのため、getPrice()メソッドで "const "キーワードを使用すると、エラーが発生します。"'CopyBuffer' - no one of the overloads can be applied to the function call"というエラーが発生します。これは、CopyBufferがconstメソッドではなく、constメソッド内で非constメソッドを呼び出すことができないために発生すると思われます。 更新したコードを表示してください。 Gustavo Hennemann 2017.09.08 17:38 #22 どうやら、関数 Compare()の中で演算子「&」を使って「this」の値を取得することで問題を解決したようです。int PriceScore::Compare(const CObject *node,const int mode=0) const { PriceScore *thisObject = (PriceScore*)&this; PriceScore *pc = (PriceScore*)node; Print(__FUNCTION__,":Compare called. Incoming: ", pc.Score()," This: ", score); if(pc.Score() < thisObject.getPrice()) return 1; else if(pc.Score() > thisObject.getPrice()) return -1; else return 0; }ようやく期待通りの値が得られました。 Doerk Hilger 2017.09.10 11:42 #23 比較の際にthisObjectを削除し、thisに置き換えることができます。しかし、なぜ関数「比較」ではなく、「演算子」機能を 使わないのだろうか?後でコードを読むのが楽になる。 nicholish en 2017.09.10 17:47 #24 Doerk Hilger:比較の際にthisObjectを削除し、thisに置き換えることができます。しかし、なぜ関数「比較」ではなく、「演算子」機能を 使わないのだろうか?後でコードを読むのが楽になる。なぜなら、これはベースクラスCObjectのポリモーフィックメソッドで、Collectionクラス、CArrayObjやCListでソートや検索を実装するためにはオーバーライドしなければ ならないからです。 nicholish en 2017.09.10 17:49 #25 Gustavo Hennemann:どうやら、関数 Compare() で演算子 "&" を使って "this" の値を取得することで問題を解決したようです。最終的に期待通りの値を得ることができました。このロジックで何を実現したいのかがよくわかりません。一般的には、ソートや検索のために同じ要素だけを比較したいと思うでしょう。... if(this.thingToSort > other.thingToSort) return 1; ... Gustavo Hennemann 2017.09.11 12:45 #26 nicholishen: このロジックで何を実現したいのかがよくわかりません。一般的には、ソートと検索のために同じ要素だけを比較したいのではないでしょうか。その通り、今はソートされています。それ以前は比較することができず、エラーやエラーが 発生していました。今はうまくいっています。この方法は明白ではなく、どの文書にもありません。これを得るまで、 私は多くのテストと「試行錯誤 」をしなければなりませんでした。他の人にもこの解決策を楽しんでもらえたらと思います。 Ex Ovo Omnia 2017.09.12 06:56 #27 Gustavo Hennemann:その通り、今はソートされています。それ以前は比較することができず、エラーや エラーが発生していたのです。今はうまくいっています。この方法は明白ではなく、どの文書にもありません。これを得るまで、 私は多くのテストと「試行錯誤 」をしなければなりませんでした。他の人にもこの解決策を楽しんでもらえたらと思います。ただ、なぜ関数 Compare() で演算子 "&" を 使って"this" の値を取得する必要があったのかが気になりますね。int PriceScore::Compare(const CObject *node,const int mode=0) const { /* PriceScore *thisObject = (PriceScore*)&this; */ PriceScore *pc = (PriceScore*)node; Print(__FUNCTION__,":Compare called. Incoming: ", pc.Score()," This: ", score); if(pc.Score() < /*thisObject.*/getPrice()) return 1; else if(pc.Score() > /*thisObject.*/getPrice()) return -1; else return 0; } nicholish en 2017.09.12 10:26 #28 Ex Ovo Omnia: ただ、なぜ関数 Compare() で"this" の値を取得 するために演算子 "&" が必要だったのかが気になるところです。 これはGetPointer(this)を使うのと同じことです。 Ex Ovo Omnia 2017.09.12 10:54 #29 nicholishen: これはGetPointer(this)を使うのと同じことです。さて、それでは「なぜ」という問いに答えられない。selfへのポインタを明らかにする理由がないのです。 nicholish en 2017.09.12 11:00 #30 Ex Ovo Omnia: さて、それでは「なぜ」という問いに答えられない。selfへのポインタを明らかにする理由はないのです。 いや、この例では冗長な抽出なので間違いなくない。しかし、ポインタしか受け付けないメソッドにこれを渡すとしたら、これを使う必要があるだろう...method(&this) 1234 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
こんにちは、@Alain Verleyen です。
getPrice()メソッドを変更し、CopyClose()の代わりにCopyBuffer()を使っています。これは、主な目的を変更するものではありません。
そのため、getPrice()メソッドで "const "キーワードを使用すると、エラーが発生します。"'CopyBuffer' - no one of the overloads can be applied to the function call"というエラーが発生します。これは、CopyBufferがconstメソッドではなく、constメソッド内で非constメソッドを呼び出すことができないために発生すると思われます。
どうやら、関数 Compare()の中で演算子「&」を使って「this」の値を取得することで問題を解決したようです。
ようやく期待通りの値が得られました。
比較の際にthisObjectを削除し、thisに置き換えることができます。
しかし、なぜ関数「比較」ではなく、「演算子」機能を 使わないのだろうか?後でコードを読むのが楽になる。
比較の際にthisObjectを削除し、thisに置き換えることができます。
しかし、なぜ関数「比較」ではなく、「演算子」機能を 使わないのだろうか?後でコードを読むのが楽になる。
なぜなら、これはベースクラスCObjectのポリモーフィックメソッドで、Collectionクラス、CArrayObjやCListでソートや検索を実装するためにはオーバーライドしなければ ならないからです。
どうやら、関数 Compare() で演算子 "&" を使って "this" の値を取得することで問題を解決したようです。
最終的に期待通りの値を得ることができました。
このロジックで何を実現したいのかがよくわかりません。一般的には、ソートや検索のために同じ要素だけを比較したいと思うでしょう。
このロジックで何を実現したいのかがよくわかりません。一般的には、ソートと検索のために同じ要素だけを比較したいのではないでしょうか。
その通り、今はソートされています。それ以前は比較することができず、エラーやエラーが 発生していました。今はうまくいっています。
この方法は明白ではなく、どの文書にもありません。これを得るまで、 私は多くのテストと「試行錯誤 」をしなければなりませんでした。他の人にもこの解決策を楽しんでもらえたらと思います。
その通り、今はソートされています。それ以前は比較することができず、エラーや エラーが発生していたのです。今はうまくいっています。
この方法は明白ではなく、どの文書にもありません。これを得るまで、 私は多くのテストと「試行錯誤 」をしなければなりませんでした。他の人にもこの解決策を楽しんでもらえたらと思います。
ただ、なぜ関数 Compare() で演算子 "&" を 使って"this" の値を取得する必要があったのかが気になりますね。
ただ、なぜ関数 Compare() で"this" の値を取得 するために演算子 "&" が必要だったのかが気になるところです。
これはGetPointer(this)を使うのと同じことです。
さて、それでは「なぜ」という問いに答えられない。selfへのポインタを明らかにする理由がないのです。
さて、それでは「なぜ」という問いに答えられない。selfへのポインタを明らかにする理由はないのです。