Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- namespace geom{
- struct Point{
- int x = 0;
- int y = 0;
- };
- std::ostream& operator<<(std::ostream& out, Point p) {
- return out << '{' << p.x << ',' << p.y << '}';
- }
- void Print(Point p) {
- std::cout << p << std::endl;
- }
- } // namespace geom
- int main() {
- geom::Point p{3, 4};
- // Вызываем функцию geom::Print, указывая её полное имя
- geom::Print(p);
- // Компилятор нашёл функцию Print, несмотря на то, что мы не указали её полное имя,
- // Так как параметр функции p имеет тип geom::Point,
- // компилятор ищет функцию Print ещё и в пространстве имён geom.
- Print(p);
- // Компилятор ищет подходящую операцию << в пространстве имён std и в пространстве имён geom
- // и находит его в geom. Благодаря ADL мы выводим пользовательские типы так:
- std::cout << p;
- // а не так:
- geom::operator<<(std::cout, p);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement