C Wrapper для C ++: как работать с шаблонами C ++? - PullRequest
2 голосов
/ 08 октября 2011

Ранее задавался вопрос о написании оболочки c для классов c ++ ( C Wrapper для C ++ ), что в принципе понятно.

Есть еще один вопрос: как мне работать с шаблонами c ++? Допустим, это мой класс:

 template<typename T> class Temp
 {
      T get(); 
      void set(T t); 
 }

Есть ли элегантный способ написать обертку c?

Ответы [ 2 ]

4 голосов
/ 08 октября 2011

Вы должны написать отдельную оболочку для каждой специализации.

0 голосов
/ 08 октября 2011

Хотя можно обернуть определенные экземпляры шаблона в C, это трудоемко и становится невозможным, если существует большое количество экземпляров шаблона.Более масштабируемое решение - написать инструмент для расширения шаблонов C ++ текстовым способом, например, препроцессором.Затем поместите его на этапе предварительной сборки для сценария / префиксов компиляции.Затем вы получаете автоматически расширенный код, который можно обернуть в C (или уже волшебным образом обернуть в C, если инструмент достаточно хорош).Развертывание шаблона в текст не должно быть даже неэффективным во время выполнения, так как это то же самое, что и в C ++.Но я ожидаю, что он будет немного медленнее, чем компилятор C ++.

...