从 C 文件调用模板函数

Calling a template function from a C file

我知道模板没有在 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 "C" 也无济于事(导致错误:带有 C 链接的模板)。我的疑问是,是否有可能以这种方式调用此模板函数?如果是,如何实现?谢谢你。

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

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

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

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

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

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