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

标签 c++ templates dll dllexport

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

我从this SO question了解到无法导出模板。

有没有人对包装 C++ 模板的最佳方式有很好的指导,以便尽可能多地保留它们的灵 active ,但可以导出?

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

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

最佳答案

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

由于无法导出模板,您无法“尽可能地保留它们的灵 active ”。

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

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

关于c++ - 包装 C++ 模板,以便它们可以在 C#、Java 等中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6716625/

相关文章:

c++ - 为什么 Qt 至少不对丢失的插槽发出警告?

c++ - c++中 'char()'和 'char'有什么区别

c++ - OpenCV - 使用 SURF 描述符和 BruteForceMatcher 进行对象匹配

python - 我可以在 Django 1.11 中将 {% include %} 与自定义过滤器结合使用吗?

c++ - 使用模板模板类参数作为参数

c++ - 从终端手动运行时,我的项目找不到它的库

c++ - 是否可以在 opencv FileStorage 中使用字符串作为名称

c++ - 为什么不能模板化模板?

c# - 使用类名获取用于我们项目的引用 dll 名称

c++ - 如何在可在Linux和Windows上运行的C++中实现适配器框架