我正在编写一个我正在使用PImpl习惯用法的DLL项目的助手类。为了避免重复的代码,我创建了一个模板PImpl类,这样可以很容易地在导出的库类中采用这个习惯用法,所以我不必公开类内部。
以下是PImpl模板类的重要部分:
//Class for easy adoption of the PImpl idiom
template<typename PImpl_T>
class __declspec(dllexport) PImpl
{
public:
extern template class __declspec(dllexport) std::unique_ptr<PImpl_T>;
private:
std::unique_ptr<PImpl_T> m_pImpl;
};
但是,C ++不喜欢我在类中自动导出std :: unique_ptr定义。我试图避免必须单独导出每个独特的指针模板实例化,所以我想知道是否有一种方法自动执行。
以下是我将如何使用此辅助类的示例:
class __declspec(dllexport) MyClass :
private PImpl<struct MyClassImpl>
{ /* class definition in here */ };
MyClassImpl结构只能在CPP文件中定义,库的用户永远不会看到它。
如何避免必须单独导出每个唯一的指针模板实例?
请注意,我知道此代码不适用于不同版本的C ++ STL;可以假设用户将使用完全相同的STL版本,甚至使用相同的编译器。
C ++版本:11或更新版本。 编译器:Visual Studio 2015。
提前致谢!