特定のオブジェクトインスタンスの仮想関数が特定の実装のものであるかどうかを確認しようとしています。オブジェクトインスタンス上の仮想関数をチェックする方法は特定の実装です
#include <cstdio>
using namespace std;
class A
{
public:
virtual void method()
{
printf("This is from A \n");
}
};
class B : public A
{
public:
virtual void method()
{
printf("This is from B \n");
}
};
int main()
{
B b;
b.method();
if (b.&method == &B::method)
{
printf("Horray! simple. \n");
}
return 0;
}
しかし、明らかに動作しませんif (b.&method == &B::method)
ライン:直感的には、次のコードセグメントのように見えます。
これがどのように機能するのかを親切にお勧めできますか?ありがとう。
もし*あなたがこれをやりたいと思うかもしれないと説明できれば、私たちはあなたを助けることができるかもしれませんか?解決したい*実際の問題は何ですか?関連する[XY問題について](http://xyproblem.info/)。 –
これがB型のオブジェクトである場合、Bのメソッドオーバーロードは明らかに冷たくなります。だから質問を理解することはできません。 –
私はこれについての答えを知りませんし、オブジェクト指向の観点からは、実際には間違っています。仮想関数を使用する場合は、それらを呼び出すだけで、実装について心配する必要はありません。このルールの例外を処理する場合、通常、オブジェクトのタイプが検査されます([typeid](http://en.cppreference.com/w/cpp/language/typeid)、dynamic_cast) – stefaanv