Здравствуйте, so5team, Вы писали:
R>>И я бы не сказал, что это какая-то широкораспространённая проблема, которая создаёт массовые неудобства.
S>Речь не про проблему, а про определения и следование этим определениям.
А из какого определения (ООП или полиморфизма) следует, что вызовы consume_a и consume_b обязаны дать разные результаты? Что мешает реализовать D::f, например, вот так:
http://coliru.stacked-crooked.com/a/fe324739d29727b0
struct D : A, B
{
void f() override {
A::f();
B::f();
std::cout << "D::f" << std::endl;
}
};
Из общих соображений: имя функции в совокупности с набором формальных параметром задают определенную семантику. Если одна и та же семантическая операция даёт один и тот же результат для одного и того же объекта, даже если она выполнена через разные интерфейсы, то как это может противоречить принципам ООП? Как по-мне, то это просто частный случай, а не нарушение каких-то общих требований.