我知道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链接的模板)。我怀疑的是,甚至可以用这种方式调用这个模板函数吗?如果是,那怎么能实现呢?谢谢。
答案 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 ++编译器。