gpt4 book ai didi

c++ - 将模板类从 C++ 库导出到 VB.NET 和 C#

转载 作者:行者123 更新时间:2023-11-28 07:57:03 24 4
gpt4 key购买 nike

我有以下问题:我用 C++ 创建了一个 DLL,其模板类定义如下:

 template <class T>
class myClass {
public:
//! Constructor
myClass(int size = 10);

//! Destructor
~myClass();

someAttributes ... ;
}

我想导出它,所以我定义如下:

   template class __declspec(dllexport) myClass<double>;

因为——我读过——在 Visual C++ 中你不能导出模板,只能导出它们的显式初始化。这样一切正常,我可以在新的 Visual C++ 代码中导入 DLL。现在:我是否必须为我需要的每种类型(myClass、myClass 等)导出一个显式实例化?还是有更好的方法——不那么天真——来做到这一点?如何在 VB.NET 项目中导入我的模板类?有办法吗?还是我必须创建一个编码(marshal)处理结构,然后在运行时在我的模板类中转换它?

谢谢大家!

最佳答案

您必须为您希望使用的每种类型导出模板的显式类型实例化。此外,您可能必须从 C++ 代码中至少调用一次要显式使用的每个方法,以便将它的目标代码包含在库中。

这样做的原因是,模板代码不是可以轻松编译到您的目标文件(或 dll)中的代码。编译器将在程序编译时生成所需的(通常只是所需的)代码。如果您的 C++ 代码从不使用模板类,编译器将完全忽略该模板。模板类的方法也是如此。如果您不使用它,则允许编译器忽略它。

底线是:为旨在从其他语言使用的库使用模板代码通常不是一个好主意...

关于c++ - 将模板类从 C++ 库导出到 VB.NET 和 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12478551/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com