我有一个关于 pimpl 模式的问题,也许你们中的一个人可以想出一个我可能错过的解决方案。我已经实现了 pimpl 模式以将我的 dll 中的实现从世界其他地方隐藏起来,但我一直坚持如何隐藏需要从 dll 中导出的结构。下面是我的问题的简单表示(省略了一些部分)
idcom.h
class IDcom_impl;
class IDcom
{
public:
IDcom_API IDcom();
void IDcom_API createList();
private:
std::unique_ptr< IDcom_impl > m_impl;
}
idcom.cpp
IDcom::IDcom() :
m_impl( new IDcom_impl())
{}
void IDcom::createList()
{
m_impl->createList();
}
idcom_impl.h
class IDcom_impl
{
public:
struct IDcom_API ListItem
{
std::string var1;
std::string var2;
}
IDcom_impl(){}
void createList();
std::vector< ListItem > m_list;
}
如果我想用另一个变量扩展 ListItemstd::string var3
并且不破坏 ABI 并从 dll 中获取“listitem”列表,我有什么选择?我知道,为了让应用程序了解有关“ListItem”的一些信息,必须导出这个结构,但这是否足够,这是一个好的设计