nested namespaces linking
От: Andrew S Россия http://alchemy-lab.com
Дата: 11.08.09 20:40
Оценка:
Всем привет.
Есть следующий код:

// настройка связей, в конфиге, в зависимости от платформы.
namespace fw
{
  namespace win
  {
  }
  using namespace win;
}

// реализация
namespace fw
{
  namespace win
  {
    namespace io
    {
      struct io_impl
      {
      };
    }
  }
}

// то, что видит пользователь

namespace fw
{
  namespace io
  {
    // using namespace fw::win::io
    struct io_front: io_impl // ошибка компиляции
    {
    };
  }
}

Для чего это нужно — есть кроссплатформенный фреймворк, реализация для каждой платформы располагается в неймспейсе этой платформы. В зависимости от опций компиляции "морда" собирает это дело при помощи using директив в неймспейс интерфейса фремворка. Сейчас, кроме настройки, которая происходит автоматически, если есть вложенные "ниже" неймспейсы, приходится делать дополнительный using в интерфейсе с пользователем. Не сложно, но и не камильфо.

Что хочется.
1. Понять причину ошибки компиляции, в смысле, где в стандарте посмотреть (3.4.6 и 7.3 просмотрел, вроде ничего похожего).
1 Добиться эффекта, чтобы fw::io мержилось с fw::io(from win) без дополнительного using.
2. Возможно, есть способ как то порефакторить это, дабы избежать подобных или других проблем. Например, есть мысли неймспейсы реализации расположить в другом порядке: fw::io::win. Как в этом случае обеспечить автоматические линки неймспейсов, не очень понятно (делать include внутри неймспейсов как то некошерно, хотя в данном случае... не знаю, в общем, не по фен шую).

Всем спасибо!
http://www.rusyaz.ru/pr — стараемся писАть по-русски
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.