(1). При использовании шаблона C++ это корректно, что компилятор (например, g ++) не скомпилирует шаблонное определение (который может только быть в заголовочном файле не исходным файлом), непосредственно, но сгенерируйте код на основе шаблонного определения для каждого из его инстанцирований и затем скомпилируйте сгенерированный код для его инстанцирований?
(2). Если я хочу записать библиотеку C++, которые обеспечивают шаблонные классы и обрабатывают функции по шаблону, действительно ли невозможно скомпилировать библиотеку в совместно используемый файл (.so.a), потому что их инстанцирования не будут нигде в коде библиотеки, но только появятся в программе пользователя? Если да, это означает, что библиотеки шаблонов являются просто файлами исходного кода не предварительно скомпилированные файлы?
Как стандартная библиотека шаблонов (STL) C++ реализована? Его исходный код предварительно компилируется или компилируется вместе с программой пользователя?
(3). В C,
как записать библиотеку, которые обеспечивают функции, действующие как шаблонные функции в C++? Действительно ли перегрузка является хорошим решением?
Если я должен записать процедуру в другую функцию для различных типов аргументов, есть ли хороший путь к многократному использованию кода? Действительно ли это - хороший способ сделать это http://www.vlfeat.org/api/imop_8c_source.html? Какие-либо другие пути?
Спасибо и всего наилучшего!
Верно ли, что при использовании шаблона C ++ компилятор (например, g ++) не будет компилировать определение шаблона .
Да. Это правильное предположение.
Определение шаблона - неполный код. Вам необходимо заполнить параметры шаблона перед его компиляцией.
Если я хочу написать библиотеку C ++, которая предоставляет классы шаблонов и функции шаблонов, невозможно ли скомпилировать библиотеку в общий файл (.so, .a )
Нет, это невозможно. Вы можете скомпилировать только отдельные экземпляры шаблона.
Как реализована стандартная библиотека шаблонов C ++ (STL)? Его исходный код предварительно скомпилирован или скомпилирован вместе с программой пользователя?
Большая часть кода STL находится в файлах заголовков и компилируется вместе с вашим приложением.
Как на C написать библиотеку, предоставляющую функции, действующие как функции шаблона в C ++? Это хороший способ сделать это http://www.vlfeat.org/api/imop_8c_source.html ? Любыми другими способами?
Добавление одного и того же файла несколько раз после переопределения макроса (как показано в предоставленной вами ссылке) - хороший способ сделать это.
(3). Как в C написать библиотеку, которая предоставляет функции, действующие как функции шаблонов в C ++? Является ли перегрузка хорошим решением?
Если мне нужно написать процедуру в другой функции для разных типов аргументов, есть ли хороший способ повторного использования кода? Это хороший способ сделать это http://www.vlfeat.org/api/imop_8c_source.html ? Любые другие способы?
Когда мне нужно написать код общего назначения, я использую void *
в качестве базового типа данных. Это хорошо, потому что позволяет хранить как общий указатель, так и «примитивное» значение (например, int). Также недавно мне пришлось скомпилировать код с использованием этого шаблона в 64-битной среде, и это научило меня важности типов данных stdint.h
!
Говоря о шаблонах в C, это плохая идея. Это, конечно, только мое мнение, но я думаю, что сильной стороной C является его простота, поэтому C менее подвержен ошибкам, чем C ++.