在另一个类中自动导出模板实例

时间:2018-01-06 12:29:11

标签: c++ templates dll stl

我正在编写一个我正在使用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。

提前致谢!

0 个答案:

没有答案