ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

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
この回答へのお礼この回答にお礼をつける(質問者のみ)
 
最新から表示回答順に表示