从 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++ 编译器。
我知道模板没有在 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++ 编译器。