是否有人建议扩展 C++ 语言以消除 pimpl?

Is there a proposal to extend the C++ language so as to obviate pimpl?

有时,您想提供一个 class 声明,它不仅是一个不透明的前向声明,而且还公开了 public 功能 - 但您不想承诺您的私人,或特定于实现的字段和方法。一种解决方案是 pimpl idiom - 使用指向内部 class 的指针,容纳 class 公开 publicly 的实现。

我不太喜欢使用 pimpl 并希望该语言允许您拥有真正私有的成员 - 这样使用 class 的代码不会 'see' 他们的声明(因此可能当实现细节改变时不需要重新编译)。另外,最近,我注意到 C++ 的发展速度要快得多——标准更新中的 3 年滴答模式。那么...是否有人建议将此类功能添加到 C++ 中?目前是否有一些编译器支持它?

是的,存在这样的提议。甚至还有好几个以前的版本,最新的是去年的:

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4173.pdf

提案将允许 operator. 超载,列出几个用例:

  • 智能引用
  • 智能指针工作相似
  • 代理
  • 界面细化
  • 粉刺
  • 手柄

您可以阅读链接的提案以了解更多信息。当然,这不一定会被接受,即使被接受,也可能不会进入 C++17。