包装C ++模板,以便它们可以在C#,Java等中使用

时间:2011-07-16 09:51:45

标签: c++ templates dll dllexport

我有一个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 */
}

1 个答案:

答案 0 :(得分:4)

当人们说“无法导出模板”时,这实际上意味着“无法导出模板。

由于无法导出模板,因此您无法“尽可能保留其灵活性”。

您可以导出单个功能,但不能导出模板。您始终可以从函数模板生成函数(通过实例化它。template <typename T> void foo()是一个模板,但void foo<int>()是一个函数,虽然名称中有一些有趣的符号)

但不,模板的灵活性只是存在,因为它们是模板。如果无法导出模板,则无法导出灵活性。您必须导出要导出的特定功能和类。