【发布时间】:2012-03-09 03:28:40
【问题描述】:
在第 172 页,Stroustrup 正在做类似的事情:
namespace Parser { //interface for users
double expr(bool);
}
namespace Parser { //interface for implementers
double prim(bool);
double term(bool);
double expr(bool);
using Lexer::get_token;
<SNIP>
}
Q1. 这是否意味着第一个命名空间被插入(例如)user.h 并包含在 main.cpp - 驱动程序中;第二个命名空间进入implementer.h 并包含在parse.cpp 中?这就是他说的原因:
"编译器没有足够的信息来检查一致性 命名空间的两个定义"
- 因为implementer.h和user.h都不能包含在“Parser implementation”(parse.cpp)中?
在第 174 页,他有:
namespace Parser { //interface for implementers
// ...
double expr(bool);
// ...
}
namespace Parser_interface { //interface for users
using Parser::expr;
}
上层命名空间进入implementer.h,下层命名空间进入user.h
在他的“dependency graph”中,他是否重申了显而易见的事实:运行 Make 时,对“Parser”(parser.cpp/implementer.h) 的任何更改都会导致 driver/main.cpp 被重建 - 不必要?
【问题讨论】:
标签: c++ namespaces one-definition-rule