Re[2]: nested namespaces linking
От: Andrew S Россия http://alchemy-lab.com
Дата: 11.08.09 22:24
Оценка:
V>Если я правильно понял (в чем я не до конца уверен), то есть два файла. В одном прописаны три пространства имен — fw, внутри которого win, и внутри которого io. Есть второй файл, в котором внутри fw прописан io. В таком случае ничего удивительного, что io_front из fw:win:io не виден в fw:io — это же совершенно другой неймспейс. Было бы как раз очень неправильно, если бы он был виден!

Не так.

Выше мы настроили, что все, что из win попадает в fw. Почему то для сущностей в win, получается, это работает.
Более того, если мы закомментим то, что видит пользователь, то вполне сможем использовать fw::io::io_impl. Т.е. с точки зрения меня, как клиента неймспейса fw, получается два (!!!!) вложенных в него неймспейса io, причем разных. Один это внесенный в область видимости из win, а второй нативный. Аргументы "за" такое поведение при лукапе я тоже могу привести, но тем не менее, в данном случае ситуация не очень логична.

AS>>1. Понять причину ошибки компиляции, в смысле, где в стандарте посмотреть (3.4.6 и 7.3 просмотрел, вроде ничего похожего).

V>Надеюсь, на этот вопрос я ответил.

Никоим образом.

AS>>1 Добиться эффекта, чтобы fw::io мержилось с fw::io(from win) без дополнительного using.

V>Невозможно, если я все правильно понял.

AS>>2. Возможно, есть способ как то порефакторить это, дабы избежать подобных или других проблем.

V>А почему не классическое решение?
V>class io {...};
V>clas win_io : io {...};
V>class nix_io : io {...};

V>class user_io : win_io


V>Или я чего-то кардинально недопонял?


Видимо, да. Все наоборот. Есть реализации (в неймспейсах платформы), и их наследует или использует конечный класс, который и будет пользовать клиент.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.