※ ChatGPTを利用し、要約された質問です(原文:->*演算子のオーバーロードについて)
->*演算子のオーバーロードについて
このQ&Aのポイント
C++の->*演算子のオーバーロード方法について質問です。AllowOverLoadクラスに->*演算子をオーバーロードする必要がありますが、具体的な方法がわかりません。
AllowOverLoadクラスに->*演算子をオーバーロードしなければならない状況ですが、具体的な方法がわかりません。
C++のAllowOverLoadクラスに->*演算子をオーバーロードする方法について質問です。具体的な方法がわかりません。
こんにちは。質問させてください。
現在下記のような処理(main関数でやっているような処理)を実現させたいのですが、うまくコンパイルできません。
#include <iostream>
class Test
{
public:
void TestFunc()
{
std::cout << "TestFunc" << std::endl;
}
};
class AllowOverLoad
{
public:
Test* operator ->()
{
return new Test;
}
};
int main()
{
void ( Test::*lpTestFunc )() = &Test::TestFunc;
AllowOverLoad overload;
( overload->*lpTestFunc )();
}
主なエラーは
error C2296: '->*' : 無効です。左オペランドには型 'AllowOverLoad' が指定されています。
です。
おそらくこの問題を解決するにはAllowOverLoadに->*演算子をオーバーロードしなくてはいけないと思うのですが、->*演算子のオーバーロード方法がいまいちよくわかりません。
いい文献やHPも見つけられなかったので質問させていただきました。
/*
現在、本番のコーディングでは暗黙的なキャストを禁止しているのでAllowOverLoadクラスに暗黙的にTest*型にキャストするような処理はなしの方向で、あくまで->*演算子のオーバーロードということでお願いします。
Microsoft WindowsXP Professional Edition
VisualStudio 2008 AcademicEdition
*/
よろしくお願いします。
お礼
とても丁寧な回答ありがとうございます。 なるほど・・・何度か読み返してやっと理解することができました。 自分が予想していたよりもはるかに複雑でむずかしかったです。 実は自作のスマートポインターとメンバ関数ポインタを併用しようとしたら、今回の問題に当たりました。 またもう少し、考察してみます。 ありがとうございました。