Например, у меня есть четыре класса, например:
class A;
class B{
protected:
void check(const A &a);
};
class C : public A, public B;
class D : public B;
Теперь я хотел бы написать функцию проверки, которая ничего не делает, если вызывающая сторона и параметр одинаковы:
void B::check(const A &a){
if(*this != a){
//do something
}
else{
//do nothing
}
}
Однакоэто не скомпилируется, так как класс B ничего не знает о классе C, который однажды вызовет проверку функции B.Было бы легко привести this
в A, но это дало бы ошибку, если бы однажды класс D вызвал бы эту проверку, поскольку она не имеет ничего общего с A. Как тогда это делается?
Править: Я мог бы упомянуть, что классы C и D будут иметь интерфейс для вызова этой проверки, которая недоступна вне этих классов, но она не сделает ничего, кроме просто передачи параметра во внутреннюю функцию