Самый безопасный способ - вообще не переопределять foo (), но разрешать переопределение функции OnFoo (), которая вызывается из базового класса, если вы не можете доверять своим программистам.MFC многое делает для обеспечения поведения по умолчанию (а не для защиты от повторной проверки).
Затем, на статическом уровне, все, что реализует OnFoo (), легко обнаруживается с помощью «Найти в файлах».
Например (не проверено на синтаксис / компиляцию и не поточно-ориентировано)
class B
{
public:
B()
{
m_bInFoo=false;
}
int foo()
{
if( !m_bInFoo )
{
m_bInFoo=true;
int nRet = OnFoo();
m_bInFoo=false;
return nRet;
}
return 0;// probably throw exception
}
protected:
// inherited classes override OnFoo(), and never call OnFoo();
virtual int OnFoo(){ return 0 };
private:
bool m_bInFoo;
}