从C文件调用模板函数

cee*_*dee 0 c c++ templates template-function

我知道模板没有在C中定义.但在我的情况下,我有一个用C++编写的API,由C编写的应用程序使用.我希望在API中添加模板函数.该函数在abc.cpp中定义如下:

template<typename T> T function_name(T param1){
  ...
  ...
  return val;
}
Run Code Online (Sandbox Code Playgroud)

abc.hpp中的声明如下:

template<typename T> T function_name(T);
Run Code Online (Sandbox Code Playgroud)

并且从xyz.c调用此函数:

int a ,b = 5;
a = function_name(b);
Run Code Online (Sandbox Code Playgroud)

但是,它在abc.cpp和abc.hpp中都显示以下错误:

 error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘<’ token
 template<typename T>
Run Code Online (Sandbox Code Playgroud)

即使使用extern"C"也无济于事(导致错误:带C链接的模板).我怀疑的是,甚至可以用这种方式调用这个模板函数吗?如果是,那怎么能实现呢?谢谢.

unw*_*ind 8

不,当然不是,C中不存在模板函数,您无法使用C编译器解析模板声明.

您将不得不在C++端为int模板实例添加一个C包装器,并调用它(例如类似的东西function_int()).