我很难理解这一点!他在这一切中想说什么?
第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是如何依赖于解析器的呢?他到底在这里做什么?他在做什么:
#include <parser-implementer.h> // this gets namespace Parser into scope
namespace Parser_interface {
using Parser::expr;
}pg 175 (顶线)驱动程序对Parser_interface接口的任何更改到底有多“脆弱”?
我也不明白那之后的任何事情(直到第176页)..有人能解释一下头文件、#include和make-dependencies吗?
你能吃两个吗:
namespace FOO { bar };
namespace FOO { baz };在一个头文件中定义??
发布于 2012-03-10 18:48:37
让我们从名称空间开始。因此,您必须了解的是,如果您有两个头文件类Cube_impl.h和Cube.h,它们都可以具有
namespace Cube { ... }命名空间是唯一的,只需定义一次。因此,他没有声明2个同名的名称空间,但他使用了两次相同的名称空间。因此,在这个名称空间中写入的所有内容都将是它的一部分。如果您愿意,您可以在多个其他类中使用该名称空间。通常可以像这样访问它
Cube::FunctionName关于“用户”界面和“实现者”界面的使用。
这是专业人士在想要对用户隐藏实现时经常使用的一种巧妙方法。它们创建第一个头文件,该文件将包含用户的所有公共成员/函数(例如Cube.h)。然后,他们将为“实现”创建另一个头文件(例如Cube_impl.h),其中将声明受保护和私有的成员/函数。
这样做的好处是,您可以在以后更改Cube_impl.h,而不会影响用户,因为他们甚至不知道那里存在的代码。
我没有读过你提到的那本书,但我希望这本书能回答你的问题。
问候
https://stackoverflow.com/questions/9595863
复制相似问题