запишите C или библиотеку C++ с “шаблоном”

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

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

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

(3). В C,

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

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

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

6
задан Tim 27 February 2010 в 20:10
поделиться

2 ответа

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

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

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

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

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

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

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

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

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

13
ответ дан 8 December 2019 в 17:21
поделиться

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

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

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

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

1
ответ дан 8 December 2019 в 17:21
поделиться