【问题标题】:Hiding private data members? (C++)隐藏私有数据成员? (C++)
【发布时间】:2010-09-17 09:39:55
【问题描述】:

有没有办法在 cpp 文件中向用户隐藏 C++ 类的私有数据成员?我认为私有成员是实现的一部分,在头文件中声明它们似乎有点倒退。

【问题讨论】:

    标签: c++ class private


    【解决方案1】:

    “pimpl”成语是通常的处理方式。

    【讨论】:

    • 谢谢,现在可以使用了。这两篇文章很好地解释了这个成语。
    • 一般来说,是的,这可能会对性能产生影响,因为每当访问私有内容时都会涉及指针取消引用。但是,编译器可能能够对其进行优化,以使影响可以忽略不计。
    • 您能否在回答中解释这一点,而不仅仅是发布链接?这些链接可能有一天会改变或消失。
    【解决方案2】:

    你想使用类似 PIMPL 成语的东西

    http://en.wikipedia.org/wiki/Opaque_pointer

    【讨论】:

    • 嘘,这里得快点
    【解决方案3】:

    【讨论】:

      【解决方案4】:

      执行此操作的经典方法是使用指向实现该功能的内部类的代理指针。据我所知,没有办法在 C++ 中进行部分类定义。

      【讨论】:

        【解决方案5】:

        去商业化? ;)

        您可以创建头文件,在其中只声明公共和受保护的 API。

        用户只看到这些,他们可以包括在内。他们将代码与您使用完整 API 和定义构建的库链接。

        对于内联函数:确保它们在非内联代码中使用,然后库中会有一个可用的定义(但是我不确定它是否会在用户实现中内联)。

        对于模板化代码,没有真正的解决办法。一种半心半意的解决方案是编写代码,它使用具有不同对象类型的模板化代码。用户将仅限于这些,因为它们是您的库中唯一可用的定义。

        【讨论】:

          猜你喜欢
          • 2013-07-07
          • 2021-01-17
          • 2011-06-18
          • 2022-11-13
          • 1970-01-01
          • 1970-01-01
          • 2012-06-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多