написать библиотеку C или C ++ с «шаблоном» - PullRequest
6 голосов
/ 27 февраля 2010

(1). При использовании шаблона C ++ правильно ли, что компилятор (например, g ++) не будет компилировать определение шаблона (которое может быть только в заголовочном файле, а не в исходном файле) напрямую, а сгенерирует код на основе определения шаблона для каждого из его экземпляров, а затем скомпилировать сгенерированный код для его реализации?

(2). Если я хочу написать библиотеку C ++, которая предоставляет классы шаблонов и функции шаблонов, невозможно ли скомпилировать библиотеку в общий файл (.so, .a), потому что их экземпляры не будут нигде в коде библиотеки, а появляются только в программа пользователя? Если да, означает ли это, что библиотеки шаблонов - это просто файлы исходного кода, а не предварительно скомпилированные файлы?

Как реализована C ++ стандартная библиотека шаблонов (STL)? Его исходный код предварительно скомпилирован или скомпилирован вместе с программой пользователя?

(3). В С

как написать библиотеку, предоставляющую функции, действующие как функции шаблона в C ++? Является ли перегрузка хорошим решением?

Если мне нужно написать процедуру в другую функцию для аргументов разных типов, есть ли хороший способ повторного использования кода? Это хороший способ сделать это http://www.vlfeat.org/api/imop_8c_source.html? Любые другие способы?

Спасибо и всего наилучшего!

Ответы [ 2 ]

12 голосов
/ 27 февраля 2010

При использовании шаблона C ++ верно ли, что компилятор (например, g ++) не будет компилировать шаблон определение.

Да. Это правильное предположение.

Определение шаблона является неполным кодом. Вам необходимо заполнить параметры шаблона перед его компиляцией.

Если я хочу написать библиотеку C ++, которая предоставляет шаблоны классов и шаблонные функции, это невозможно скомпилировать библиотеку в общую файл (.so, .a)

Нет, это невозможно. Вы можете компилировать только отдельные экземпляры шаблона.

Как работает стандартная библиотека шаблонов C ++ (STL) реализован? Это его исходный код предварительно скомпилированный или скомпилированный вместе с программа пользователя?

Большая часть кода STL находится в заголовочных файлах и компилируется вместе с вашим приложением.

В C, как написать библиотеку, которая обеспечить функции, действующие как шаблон функции в C ++? Это хороший способ сделать это http://www.vlfeat.org/api/imop_8c_source.html? Есть ли другие способы?

Хороший способ сделать это - включить несколько раз один и тот же файл после переопределения макроса (как показано в указанной вами ссылке).

1 голос
/ 27 февраля 2010

(3). В C, как написать библиотеку, которая предоставляет функции, действующие как функции шаблона в C ++? Является ли перегрузка хорошим решением?

Если мне нужно написать процедуру в другую функцию для разных типов аргументов, есть ли хороший способ повторного использования кода? Это хороший способ сделать это http://www.vlfeat.org/api/imop_8c_source.html? Любые другие способы?

Когда мне нужно написать код общего назначения, я использую void * в качестве базового типа данных. Это хорошо, потому что позволяет хранить как общий указатель, так и «примитивное» значение (например, int). Также недавно мне пришлось скомпилировать некоторый код с использованием этого шаблона в 64-битной среде, и это научило меня важности stdint.h типов данных!

Говоря о действии как шаблон в C, это не очень хорошая идея. Это, конечно, мое мнение, но я думаю, что сильной стороной C является его простота, поэтому C менее подвержен ошибкам, чем C ++.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...