Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpSpNlTw 472 of 696 menu
◀ ▶

Два пространства в C++

При двух пользовательских типах в списке параметров поиск, зависящий от аргумента смотрит пространства имен обоих аргументов.

Если одноименная функция лежит в каждом из них, неквалифицированный вызов может стать неоднозначным. Безопасный прием - оставить перегрузку в одном пространстве и явно указать другое имя там, где нужна вторая версия.

Объявим типы в East и West, функцию join только в East и успешный вызов из main:

#include <iostream> namespace East { struct Node {}; } namespace West { struct Leaf {}; } namespace East { void join(East::Node, West::Leaf) { std::cout << "east\n"; } } namespace West { void mark(West::Leaf) { std::cout << "west\n"; } } int main() { East::Node node{}; West::Leaf leaf{}; join(node, leaf); West::mark(leaf); return 0; }

Создайте Alpha::Token и Beta::Flag. Объявите match только в Alpha, печатающую ok. Вызовите match без квалификатора и отдельно Beta::match, если добавите вторую версию там.

Для Ship::Hull и Port::Dock задайте moor в Ship. Проверьте неквалифицированный вызов и выведите строку, которую печатает найденная функция.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить