Вызов функции шаблона из файла C
Я знаю, что шаблоны не определены в C. Однако в моем случае у меня есть API, написанный на C++, который используется приложением, написанным на C. Я хочу добавить функцию шаблона в API. Функция определяется в abc.cpp следующим образом:
template<typename T> T function_name(T param1){
...
...
return val;
}
объявление в abc.hpp следующее:
template<typename T> T function_name(T);
и эта функция вызывается из xyz.c как:
int a ,b = 5;
a = function_name(b);
Тем не менее, он показывает следующую ошибку как в abc.cpp, так и в abc.hpp:
error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘<’ token
template<typename T>
Даже использование extern "C" не помогает (приводит к ошибке: шаблон с C-связью). Я сомневаюсь, можно ли вообще вызывать эту функцию шаблона таким образом? Если да, то как этого достичь? Спасибо.
3 ответа
Поскольку вы уже смешали C и C++ (и, следовательно, должны были позаботиться о возможных проблемах), еще одно решение - продолжить разработку приложения на C++. Таким образом, новый код может использовать все приятные функции библиотеки C++, такие как шаблоны;-), перегруженные функции и т. Д., И имеет доступ к стандартной библиотеке C++, которая может значительно повысить производительность.
Я не вижу принципиальных препятствий для использования C++ для новых исходных файлов в приложении; легко ли и стоит ли переключать существующие файлы C на C++ после внесения изменений - это другой вопрос.
Нет, конечно, нет, шаблонные функции не существуют в C, и вы не можете проанализировать объявление шаблона с помощью компилятора C.
Вам нужно будет добавить оболочку C на стороне C++ для int
экземпляр шаблона, и вызвать его (например, что-то вроде function_int()
).
Поскольку C не поддерживает шаблоны, вы можете рассмотреть возможность использования универсальных функций типов - основанного на макросах метода определения общих выражений.
Если это не так, я предлагаю остаться с компилятором C++.