程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

eC (Ecere) 如何不用担心类的私有数据字段

发布于2021-10-16 09:29     阅读(374)     评论(0)     点赞(19)     收藏(1)


在暴露库的 C++(或 Java)接口时,必须提供类的“私有”字段,这是不稳定的,因为编译器需要知道类的结构,以便能够进行计算,例如,sizeof()。

但为什么需要这样做以及如何缓解?因为,对我来说,这似乎违反了封装概念:为什么用户会担心或可以访问被认为是私有的东西?

一种解决方案是为每个对象定义一个 size() 函数,但这在运行时会很麻烦。

尽管如此,一种语言 (eC/ecere) 声称 [1]:

“库开发人员无需担心最终用户看到类定义的私有内容,只有声明为公共的内容才会可见”

这是如何在 eC 中实现的,如何在 Java 或 C++ 中实现类似的?

[1] http://www.ecere.com/technologies.html


解决方案


仅仅因为程序员或编译器可以“看到”一个私有类型,并不意味着它违反了“封装”。将封装视为“合同”(您不应该使用它,但您仍然可以看到它)。

... 然而 ...

如果您真的想“隐藏”底层表示,那么您的问题的答案是使用不透明指针:

这是 C++ 中的一个示例:

http://www.tilander.org/aurora2/Stupid_Cpp_Tricks/index.html

我在 C++ 上购买的早期书籍之一是 James Coplien 的“Acid Book”(正如 Meyers 所说)。今天里面的很多东西都是面包和黄油的东西,虽然你还没有读过,但你应该读。詹姆斯(或吉姆,这个名字多好啊)介绍的其中一件事是 Pimpl idom。Private Implementation 是对这个奇怪名称的愉快解释,指向 implementation 的指针更合理。简单来说,它是一个编译器防火墙,或者是一种有效地向外部隐藏任何类的实现不透明类型

// in the header
class Foo
{
public:
    Foo();
    ~Foo();

private:
    struct Pimpl; // forward declaration to internal structure
    Pimpl* m; // opaque pointer to actual data
};

// in the cpp file
struct Foo::Pimpl
{
    std::string name;
};

Foo::Foo()
    : m( new Pimpl)
{
}

Foo::~Foo()
{
    delete m;
}


所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:http://www.javaheidong.com/blog/article/303946/7fadc40ffc9b0035fc15/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

19 0
收藏该文
已收藏

评论内容:(最多支持255个字符)