c++ DLL的制作:静态变量初始化问题

Making of C++ DLL: static variable initialization problem

本文关键字:静态 变量 初始化 问题 DLL c++      更新时间:2023-10-16

我正试图在c++中制作一个DLL,我可以在其他项目中使用。我的一个类是这样的

MyClass.h:

#ifdef MYDLL_EXPORTS
#define MYDLL_API __declspec(dllexport)
#else
#define MYDLL_API __declspec(dllimport)
#endif
template <typename T, typename C>
class MYDLL_API MyClass
{
    private:
      static C *variable;
    //...
};

MyClass.cpp:

#include "stdafx.h"
#include "MyClass.h"
template <typename T, typename C>
C *MyClass<T, C>::variable= NULL;

当我编译它时,我得到这个变量的"错误LNK2001:未解析的外部符号…"。这段代码在我试图使DLL…

您不能将模板类放入DLL中,因为这根本不会这样工作:当您为模板指定实际类型时,编译器会发出类的实际代码(这就是为什么STL作为源代码发布的原因)。

创建一个。h文件并在其中添加所有实现。在其他项目中,包括它:

// MyClass.h
template <typename T, typename C>
class MyClass
{
    private:
       static C *variable;
    //...
};
template <typename T, typename C>
   C *MyClass<T, C>::variable= NULL;

// OtherProject.cpp
#include "MyClass.h"
// ...
MyClass<int, char> instance;  //...

如果您确定其他项目将使用哪些类型,您可以使用显式实例化,只需添加如下内容:

// explicitly instantiate class
template class MyClass<int, char>;

到MyClass.cpp