関数が派生クラスで(静的に)オーバーライドされたかどうかを検出したい:
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」を呼び出しません。私は自分の質問に直接答えることを好みます。過負荷を判断するために実際の問題について説明します。また、一般的な問題に取り組む他の方法を示す回答をいただければ幸いです。
さて、それはコンパイルされます、私はまだ私の実際のコードとの違いを見つけていません、それはそうではありませんでした。ちなみに、私の実際のコードでは、関数の呼び出しを避けようとしているだけでなく、さらにいくつかあります。関数がオーバーライドされているのか、それともまったく別の方法を使用する必要があるのかを本当に知りたいです。