因此,当试图与 PIMPL 习惯用法取得联系时,会发现两种常见的做法:

  • 在类外使用前向声明:
    class PimplClass;
    class VisibleClass
    {
    private:
        PimplClass* d_ptr;
    };
    
  • 在类中使用前向声明:
    // *.hpp
    class VisibleClass
    {
    private:
       struct PimplClass;
       PimplClass* d_ptr;
    };
    // *.cpp file:
    struct VisibleClass::PimplClass
    {
      int x;
    };
    

  • 这里有两个问题:
  • 老实说,我不知道为什么第二个有效。我的意思是表达式 struct PimplClass 我只知道从前向声明而不是在类中。有人可以向我解释一下吗?
  • 使用哪种解决方案?优势在哪里,还是只是品味问题?
  • 最佳答案

    您可以在类范围内进行前向声明。所以第二个例子是绝对正确的。

    第二个例子的主要优点是你的 PimplClass 不能从任何地方访问,只能从 VisibleClass 访问,因为它是在它的私有(private)部分中声明(向前声明)的。

    关于c++ - 这两种 PIMPL 方法之间的差异,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32005777/

    10-16 05:05