1

我有一个.lib严重依赖模板的 C++ 库 ()。我正在为这个库创建一个 C++ 包装器,以便在.dll. 这些公开的函数将依次被 Java 和 C# 库分别通过 JNA/JNI 和 PInvoke 使用。

我从这个 SO question中了解到,无法导出模板。

是否有人对包装 C++ 模板的最佳方式有很好的指导,以便保留尽可能多的灵活性,但可以导出?

例如,典型的 C++ 函数如下所示:

template <class A, class B>
inline
A 
do_something(A first, A last, 
              B  result )
{
    /* implementation */
}
4

1 回答 1

4

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

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

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

但是不,模板的灵活性只是因为它们是模板。当您无法导出模板时,您也无法导出灵活性。您必须导出要导出的特定函数和类。

于 2011-07-16T09:57:10.447 回答