質問 |
||
| QNo.4011916 | global operatorについて | |
|---|---|---|
| 質問者:emuesuenu |
特定のクラスのポインタの比較(less)をオーバーライドしたいのですが、 1. そのような処理は実装可能か? 2. 実装可能とした場合、operatorの宣言は どのように書いたらよいのか? 具体的には以下のようなコードになります。 ---- class Test { public: float m_Priority; Test(const float p) { m_Priority = p; } }; Test* a = new Test(0); Test* b = new Test(1); if(a < b){ a = a; } ---- 試しに bool operator < (const Test* const l, const Test* const r) { return l->m_Priority < r->m_Priority; } と書いてみましたが、コンパイルエラーが出てしまいました。 補足 ・ポインタのオーバーライドが非常に危険なこと ・組み込み方のオーバーライドが禁止されている 上記の2点は確認済みです。 ポインタを格納するクラスを別途作成し、 その中で比較をすればよいのでしょうが、 高速化のためにどうしてもポインタ比較の オーバーライドが必要になりました。 |
|
困り度:
|
||
| 質問投稿日時: 08/05/10 17:17 |
||
回答 |
|
| ANo.2 | 「ポインタを格納するクラスを別途作成する」のは, 十分実用だと思うけどなぁ. 速度に関しては, コンパイラに依存するけどインラインにすれば問題ないはず. もしくは, 文面で < とは書けないけど関数オブジェクト (+インライン) を使うくらいかな. |
|---|---|
| 回答者:Tacosan | |
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| 回答日時: 08/05/10 23:16 |
|
| |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |
回答 |
|
| ANo.1 | bool operator < (const Test& l, const Test& r) { return l.m_Priority < r.m_Priority; } Test* a = new Test(0); Test* b = new Test(1); if(*a < *b) (以下略) でコンパイルできます。 |
|---|---|
| 回答者:matsuzay08 | |
| 種類:回答 どんな人:経験者 自信:自信あり |
|
| 回答日時: 08/05/10 21:38 |
|
| |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |