0

我有以下问题:我在 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 项目中导入我的模板类?有办法吗?还是我必须创建一个编组结构,然后在运行时将其转换到我的模板类中?

谢谢你们!

4

1 回答 1

1

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

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

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

于 2012-09-18T14:06:22.990 回答