で非仮想オーバーライドを検出するために、私は関数は(静的)派生クラスでオーバーライドされたかどうかを検出したい:場合は明らかにどのようにコンパイルまたは実行時
template< typename T >
struct A{ void func(){ static_cast<T*>(this)->func(); } };
struct B: A<B>{};
struct C: A<C>{ void func(){ std::cout << "class C" << std::endl; };
C c;
if(&A<C>::func != &C::func)
c.func();
、私は「FUNC」をコールすることはありませんオーバーライドはありません。 私は自分の質問に直接答えが好きです。オーバーロードを判断するために実際の問題について説明します。 一般的な問題にアプローチするための他の方法を示す回答もありがとう。
これはコンパイルされていますが、実際のコードとの違いはまだわかりません。 ところで、私の実際のコードでは、単に関数を呼び出すことを避けようとしているわけではありません。関数がオーバーライドされているかどうか、まったく異なるメソッドを使用する必要があるかどうかを本当に知りたいです。
これは、SFINAEの仕組みとよく似ています。 http://en.wikipedia.org/wiki/Substitution_failure_is_not_an_error –
あなたのコードは意味をなさない: 'A'はテンプレートですが、2行目の下ではテンプレート以外のテンプレートのように使います。 –
まあ、このポインタの比較は、すべてのコンパイラエラーを修正すると動作するように見えます。そう? – UncleBens