D
легко взаимодействует с C
.
D
так же легко взаимодействует с C++
, но (и он большой, но) C++
должен быть чрезвычайно тривиальным. Код не может использоваться:
- Пространство имен
- Шаблоны
- множественное наследование
- смешивать виртуальные с не виртуальными методами
- больше?
Я полностью понимаю ограничение наследования. Остальные, однако, чувствуют себя как искусственные ограничения. Теперь я не хочу иметь возможность напрямую использовать std::vector<T>
, но мне очень хотелось бы иметь возможность связываться с std::vector<int>
как с внешним шаблоном.
страница с интерфейсом С++ имеет этот особенно удручающий комментарий.
D шаблоны имеют мало общего с С++, и это очень маловероятно что любой разумный метод можно найти для выражения С++ шаблоны в канале, совместимом с каналами с D.
Это означает, что С++ STL и С++ Boost, вероятно, никогда не будет доступным от D.
По общему признанию, мне вряд ли понадобится std::vector
при кодировании в D
, но я бы хотел использовать QT или boost.
Так что сделка. Почему так сложно выразить нетривиальные классы C++
в D? Не стоит ли добавлять какие-то специальные аннотации или что-то, чтобы выразить хотя бы пространства имен?
Обновление: "D имеет поддержку пространств имен в произведениях" из Walter Bright.