c++的C包装器:如何处理c++模板

C Wrapper for C++: How to deal with C++ templates?

本文关键字:c++ 处理 模板 何处理 包装      更新时间:2023-10-16

之前的问题是关于为c++类编写一个c包装器(c wrapper for c++),这基本上是清楚的。

还有一个问题:我如何处理c++模板?假设这是我的类:

 template<typename T> class Temp
 {
      T get(); 
      void set(T t); 
 }

是否有一种优雅的方式来编写c包装器?

您必须为每个专门化编写单独的包装器。

虽然可以用C语言包装模板的特定实例化,但如果有大量的模板实例化,这是非常困难的,并且是不可行的。更具可扩展性的解决方案是编写一个工具,以基于文本的方式扩展c++模板,就像预处理器一样。然后,将其放入编译脚本/prefs的预构建步骤中。然后,您最终会得到可以用C语言包装的自动扩展代码(或者如果工具足够花哨,已经神奇地包装成C语言)。在运行时将模板扩展为文本甚至不应该是低效的,因为它在某种程度上与c++所做的事情相同。但是我希望它的编译速度比c++编译器慢一点。