重组类以从dll导出类

时间:2014-10-14 16:00:44

标签: c++ c templates dll

我有一个库,我有一个模板类,它将struct类型作为模板参数,并执行一些操作,如save(在文件中转储),open(打开文件以保存struct数据)等。

template<class T>
class MyDataSaver{};

因此库的用户使用他们希望的任何成员创建结构,然后编写大小,像结构中的简单函数一样序列化,模板类使用并执行操作。 创建模板类的新实例

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().

现在我的问题,我想将库转换为dll。如何重新构建此代码或创建一个新类,这可以允许库用户使用dll而不是库,而库用户端的代码更改最少?

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

我想要一个动态链接的dll(不是那些与使用lib文件的应用程序链接的dll)应用程序可以加载的。因此,如果我在dll中进行更改,例如更改数据保存媒体,或使用crt文件函数而不是特定于操作系统的文件,则使用dll的应用程序应该仍然可以加载并使用它,就像没有任何更改一样。因此,除了更改界面之外的所有更改都不应对应用程序产生影响。

1 个答案:

答案 0 :(得分:0)

使用模板时,编译器会在编译时实例化(创建类型/类)。因此,你需要知道类型将是T才能在你的dll中实例化一个特定的类,你肯定猜测是不可能的。

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

如果你不希望别人看到你的代码,那么有很多方法可以实现这一点,但这是另一个故事。

您还可以阅读此内容:Benefits of header-only libraries