Обтекание шаблонов C ++, чтобы их можно было использовать в C #, Java и т. Д. - PullRequest
1 голос
/ 16 июля 2011

У меня есть библиотека C ++ (.lib), которая сильно зависит от шаблонов.Я создаю оболочку C ++ для этой библиотеки, чтобы представить ее функции извне в .dll.Эти открытые функции, в свою очередь, будут использоваться библиотеками Java и C # через JNA / JNI и PInvoke соответственно.

Я понимаю из этого вопроса SO , что невозможно экспортировать шаблоны.

Есть ли у кого-нибудь хорошее руководство по наилучшему способу обертывания шаблонов C ++, чтобы большая часть их гибкости сохранялась, но могла быть экспортирована?

Например, типичная функция C ++ будетследующее:

template <class A, class B>
inline
A 
do_something(A first, A last, 
              B  result )
{
    /* implementation */
}

1 Ответ

4 голосов
/ 16 июля 2011

Когда люди говорят, что «невозможно экспортировать шаблоны», это на самом деле означает «невозможно экспортировать шаблоны.

Поскольку невозможно экспортировать шаблоны, у вас нет возможности»сохранить как можно больше их гибкости ".

Вы можете экспортировать отдельные функции, но не шаблоны. Вы всегда можете сгенерировать функцию из шаблона функции (создав его экземпляр. template <typename T> void foo() - это шаблон, но void foo<int>() - это функция, хотя и с некоторыми забавными символами в названии)

Но нет, гибкость шаблонов существует только потому, что они являются шаблонами. Когда вы не можете экспортировать шаблон, вы можетеВы также можете экспортировать гибкость. Вам нужно будет экспортировать определенные функции и классы, которые вы хотите экспортировать.

...