我有一个用文本文件路径构造的类。它解析文本文件并将各种矢量和地图中的大量数据存储为其成员。我想与不同版本的MSVS用户分享这个类作为dll(这对我来说是新的)。
我刚才的原始实现直接返回了STL容器。阅读之后,我的理解是这很危险,因为不同的编译器或同一编译器的不同版本可以轻松地以不同方式实现容器。我看到的一个解决方案是显式实例化您正在使用的任何模板并将其导出。我也有字符串所以我需要实例化并导出,因为std :: string实际上是更复杂模板的别名。但是,即使我走了那条路线,我也无法做出导出地图的事情。
我现在所做的是,我没有让用户访问容器,而是使用了一个访问函数来获取索引(或者是地图的键,或者是我的地图矢量的键和索引)得到)并获取值。我的所有参数和返回值都是基本类型,包括字符串的const char *。
我是否正确理解了这个问题,这是一个合理的方法吗?我是否需要担心c ++中的整数原语没有在标准中严格定义?我想我也可以使用std定义的整数类型。一个问题是用户将无法迭代容器或检查大小。我可以提供作为成员的大小(所有向量都是相同的大小),然后我想它只是由用户提供他们自己的向量并填写它,如果他们想要其他向量功能。