从C文件调用模板函数

时间:2016-11-18 13:30:22

标签: c++ c templates template-function

我知道C中没有定义模板。但在我的情况下,我有一个用C ++编写的API,由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&#34; C&#34;没有帮助(导致错误:带C链接的模板)。我怀疑的是,甚至可以用这种方式调用这个模板函数吗?如果是,那怎么能实现呢?谢谢。

3 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:1)

由于您已经混合了C和C ++(因此必须考虑到可能的问题),另一种解决方案是继续在C ++中开发应用程序。这样,新代码可以使用C ++库的所有优秀功能,如模板;-),重载函数等,并且可以访问C ++的标准库,从而大大提高生产力。

我没有看到在应用程序中使用C ++来处理新源文件的主要障碍;在编辑时将现有C文件切换为C ++是否容易和有价值是另一个问题。

答案 2 :(得分:0)

由于C不支持模板,您可以考虑使用Type-Generic Functions - 一种定义泛型表达式的基于宏的方法。

如果不是这种情况,我建议继续使用C ++编译器。