C++ 重新构造类以从dll导出类

C++ 重新构造类以从dll导出类,c++,c,templates,dll,C++,C,Templates,Dll,我有一个库,其中有一个模板类,它将结构类型作为模板参数,并执行一些操作,如保存(转储到文件中)、打开(打开文件以保存结构数据)等 模板 类MyDataSaver{}; 因此,库的用户使用他们想要的任何成员创建他们的结构,然后写入大小、序列化,就像模板类使用并执行操作的struct中的简单函数一样。 创建模板类的新实例 struct StructType { int i; char ch; int size() { return sizeof(i) + sizeof(ch);}

我有一个库,其中有一个模板类,它将结构类型作为模板参数,并执行一些操作,如保存(转储到文件中)、打开(打开文件以保存结构数据)等

模板
类MyDataSaver{};
因此,库的用户使用他们想要的任何成员创建他们的结构,然后写入大小、序列化,就像模板类使用并执行操作的struct中的简单函数一样。 创建模板类的新实例

struct StructType
{
  int i;
  char ch;

  int size() { return sizeof(i) + sizeof(ch);}
  template<class Archive>
  void serialize(Archive ar){ar & i & ch;}
};

MyDataSaver<StructType> myData;
// And then
myData.save()
// and
myData.open().
structStructType
{
int i;
char ch;
int size(){return sizeof(i)+sizeof(ch);}
模板
无效序列化(存档ar){ar&i&ch;}
};
MyDataSaver myData;
//然后
myData.save()
//及
myData.open()。
现在我的问题是,我想把库转换成dll。如何重新构造此代码或创建一个新类,以允许库用户使用dll而不是库,并且库用户端的代码更改最小

我能想到的一种粗略方法是,创建一个新的模板类,并在其中包含一个字节数组,然后导出它,以及一些如何通过这个新类存储结构类型的方法


我想要一个应用程序可以加载的动态链接dll(而不是那些使用lib文件与应用程序链接的dll)。因此,如果我在dll中进行更改,比如更改数据保存介质,或者使用crt文件函数而不是特定于操作系统的函数,那么使用dll的应用程序应该仍然能够加载和使用它,就好像什么都没有更改一样。因此,除更改接口外,所有更改都不会对应用程序产生影响。

使用模板时,编译器会在编译时实例化(创建类型/类)。因此,您需要知道哪个类型将是
T
,以便在dll中实例化特定的类,正如您所猜测的那样,这是不可能的

一个好方法是创建库(与大多数库一样)。并在
*.hpp
文件中提供API

如果你不想让别人看到你的代码,那么有很多方法可以做到这一点,但这是另一回事

您也可以对阅读以下内容感兴趣:

struct StructType
{
  int i;
  char ch;

  int size() { return sizeof(i) + sizeof(ch);}
  template<class Archive>
  void serialize(Archive ar){ar & i & ch;}
};

MyDataSaver<StructType> myData;
// And then
myData.save()
// and
myData.open().