inheritance - Diamond of death and Scope resolution operator (c++) -
i have code (diamond problem):
#include <iostream> using namespace std; struct top { void print() { cout << "top::print()" << endl; } }; struct right : top { void print() { cout << "right::print()" << endl; } }; struct left : top { void print() { cout << "left::print()" << endl; } }; struct bottom: right, left{}; int main() { bottom b; b.right::top::print(); }
i want call print()
in top
class.
when try compile error: 'top' ambiguous base of 'bottom'
on line: b.right::top::print();
why ambiguous? explicitly specified want top
right
, not left
.
i don't want know how it, yes can done references, virtual inheritance, etc. want know why b.right::top::print();
ambiguous.
why ambiguous? explicitly specified want
top
right
, notleft
.
that intent, that's not happens. right::top::print()
explicitly names member function want call, &top::print
. not specify on subobject of b
calling member function on. code equivalent conceptually to:
auto print = &bottom::right::top::print; // ok (b.*print)(); // error
the part selects print
unambiguous. it's implicit conversion b
top
that's ambiguous. you'd have explicitly disambiguate direction you're going in, doing like:
static_cast<right&>(b).top::print();
Comments
Post a Comment