首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pg: 172-175多个接口,组态软件,C++编程语言,3E

pg: 172-175多个接口,组态软件,C++编程语言,3E
EN

Stack Overflow用户
提问于 2012-03-07 12:31:38
回答 1查看 165关注 0票数 1

我很难理解这一点!他在这一切中想说什么?

第172-173页,他是否创建了具有两个接口(Parser,Parser-prime)的单个名称空间。然后,他是否将每个接口粘贴到不同的头文件(parser-implementer.h和parser-user.h)中。parser-user.h具有较小的名称空间定义,parser-implementer.h具有较大的(实现者)名称空间定义。但是为什么他会说:“编译器没有足够的信息来检查命名空间的两个定义的一致性。”??如果实际的实现在: parser-crud.c中,他应该:#include <parser-implementer>,这样编译器就可以保证C定义与头文件中的声明相匹配。当然,不会检查parser-user.h。这就是他想说的吗?

那么在pg:174(下半部分)上,Parser_interface是如何依赖于解析器的呢?他到底在这里做什么?他在做什么:

代码语言:javascript
复制
#include <parser-implementer.h>  // this gets namespace Parser into scope
namespace Parser_interface {
    using Parser::expr;
}

pg 175 (顶线)驱动程序对Parser_interface接口的任何更改到底有多“脆弱”?

我也不明白那之后的任何事情(直到第176页)..有人能解释一下头文件、#include和make-dependencies吗?

你能吃两个吗:

代码语言:javascript
复制
namespace FOO { bar };
namespace FOO { baz };

在一个头文件中定义??

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-10 18:48:37

让我们从名称空间开始。因此,您必须了解的是,如果您有两个头文件类Cube_impl.h和Cube.h,它们都可以具有

代码语言:javascript
复制
namespace Cube { ... }

命名空间是唯一的,只需定义一次。因此,他没有声明2个同名的名称空间,但他使用了两次相同的名称空间。因此,在这个名称空间中写入的所有内容都将是它的一部分。如果您愿意,您可以在多个其他类中使用该名称空间。通常可以像这样访问它

代码语言:javascript
复制
Cube::FunctionName

关于“用户”界面和“实现者”界面的使用。

这是专业人士在想要对用户隐藏实现时经常使用的一种巧妙方法。它们创建第一个头文件,该文件将包含用户的所有公共成员/函数(例如Cube.h)。然后,他们将为“实现”创建另一个头文件(例如Cube_impl.h),其中将声明受保护和私有的成员/函数。

这样做的好处是,您可以在以后更改Cube_impl.h,而不会影响用户,因为他们甚至不知道那里存在的代码。

我没有读过你提到的那本书,但我希望这本书能回答你的问题。

问候

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

https://stackoverflow.com/questions/9595863

复制
相关文章

相似问题

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