2013-05-23 10 views
5

を与えオーバーロード。しかし、ポインタを扱う際にかっこ演算子を使用すると、複雑になります。私がやりたい:は、私は次のシグネチャを使用して、括弧演算子をオーバーロードすることができますポインタ

// pMyObj is a pointer to an object of type MyClass 
pMyObj->(2,3) = 'X'; 
char Y = pMyObj->(2,3); 

はしかし、そのような構文は、(少なくとも、VisualStudioを中)エラーError: expected a member nameが得られます。

以下は動作しますが、逆参照や引数よりも多くのかっこで私に巻き込まれているようです。

char X = (*pMyObj)(2,3); 

()オーバーロードを呼び出すために->演算子を使用する方法はありますか?

+2

'pMyObj-> operator()(2,3)' – juanchopanza

+0

本当にポインタを削除できませんか?そうでない場合は、2つの悪のうちの小さい方を選ぶ必要があります。 – chris

答えて

8

はい、あなたはそれが好きではありません。

pMyObj->operator()(2,3); 
+0

ありがとうございました! 'pMyObj-> operator(2,3)'を試しましたが、うまくいきませんでした。私はあなたが何をしているにせよ、その嫌なことを推測するが、私はこれを好むと思う! – chessofnerd

+2

@chessofred実際には別の方法があります:operator()をオーバーロードせず、代わりに読みやすい名前の関数を使用してください: 'pMyObj-> itemAt(2,3)' – Luis

+0

これは非常に便利な質問でした。私は 'std :: uniform_int_distribution'のメンバー関数' operator() 'へのポインタを作成する際に問題に直面していました。クラスポインタを使用して関数を使用できるようになりましたが、メンバー関数へのポインタを直接どのように作成するのですか?以下は私にとってはうまくいかないようです: 'int(std :: uniform_int_distribution :: * myFunc)(std :: mt19937_64)=&std :: uniform_int_distribution :: operator' – Sudarsan

0

あなたは、あなたがこのようなものを書くことができ、以下のよう

#define SUB operator() 

をすれば...

pMyObj->SUB(2,3) 

Fortranほどエレガントではありませんが、実際の使用にはあまりにも醜いかもしれません。

関連する問題