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