首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pimpl最终用户在pimpl中的全局和私有前向声明之间的差异

pimpl最终用户在pimpl中的全局和私有前向声明之间的差异
EN

Stack Overflow用户
提问于 2014-11-20 04:22:15
回答 1查看 188关注 0票数 2

考虑以下两种实现pimpl成语的方法:

代码语言:javascript
复制
// file  g_visible.h 

//global forward declarations
class HiddenStuff_A;
class HiddenStuff_B;

class g_visible
{
   public:

      // API goodies for the end-user

   private:
      std::unique_ptr< HiddenStuff_A >  hs_a;
      std::unique_ptr< HiddenStuff_B >  hs_b;
}

代码语言:javascript
复制
// file  p_visible.h 

class p_visible
{
   public:

      // API goodies for the end-user

   private:
      // private forward declarations
      class HiddenStuff_A;
      class HiddenStuff_B;
      std::unique_ptr< HiddenStuff_A >  hs_a;
      std::unique_ptr< HiddenStuff_B >  hs_b;
}

问题:用于最终用户--即对于包含gp_visible.h文件之一的开发人员--包含g_visible.h或p_visible.h有什么区别?

EN

回答 1

Stack Overflow用户

发布于 2014-11-20 04:46:16

区别在于,它们在全局范围内有两个“隐藏”类的前向声明(或者如果您的代码将g_visible放置在名称空间中,那么无论名称空间是什么)。

不必要的名称空间污染。实际后果:

  • 它们不能在名称空间中再次使用相同的标识符,而我倾向于对所有的Impl类使用pImpl
  • 他们的IDE完成列表浪费了他们永远不想选择的标识符的空间。
  • 客户端代码可以在转换单元中定义HiddenStuff_A*HiddenStuff_A*定义的变量或函数参数,但实际上不能让变量指向或调用

简而言之,没有Impl声明private是一个糟糕的选择。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27031713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档