我有一个C ++库(.lib
),它很大程度上依赖于模板。我正在为这个库创建一个C ++包装器,以便在.dll
外部公开它的函数。这些公开的函数将分别由Java和C#库通过JNA / JNI和PInvoke使用。
我从this SO question了解到无法导出模板。
是否有人对包装C ++模板的最佳方法有很好的指导,以便尽可能保留其灵活性,但可以导出?
例如,典型的C ++函数如下:
template <class A, class B>
inline
A
do_something(A first, A last,
B result )
{
/* implementation */
}
答案 0 :(得分:4)
当人们说“无法导出模板”时,这实际上意味着“无法导出模板。
由于无法导出模板,因此您无法“尽可能保留其灵活性”。
您可以导出单个功能,但不能导出模板。您始终可以从函数模板生成函数(通过实例化它。template <typename T> void foo()
是一个模板,但void foo<int>()
是一个函数,虽然名称中有一些有趣的符号)
但不,模板的灵活性只是存在,因为它们是模板。如果无法导出模板,则无法导出灵活性。您必须导出要导出的特定功能和类。