我有很多遗留代码,我希望组织得更好,并将我们的库放入命名空间。
因此,我有一堆#include"我的图书馆的标题。"
我想移动"我的图书馆内容"进入各种命名空间,例如:
namespace Toolbox::AFX; // application framework extensions
但是我不断地反对C ++的规则(限制),因为我允许在命名空间注入的地方使用。
我想#include我的一些客户端标头中的标头 - 所以我可以访问各种库设施和类 - 但我不想转身并注入这些名称空间马上回到我客户的翻译单位!
e.g。
#include "AccelTable.h" // my library's ACCEL management class lives here
class Foo
{
CAccelTable m_hotkeys; // use the darn thing
...
};
但如果我把它放在名称空间内,CAccelTable就不再有效了。
我无法做到显而易见:
class Foo
{
using namespace Toolbox::AFX; // <<-- error
CAccelTable m_hotkeys; // use the darn thing
...
};
和IIRC,这会将命名空间注入调用者:
#include "AccelTable.h" // my library's ACCEL management class lives here
using namespace Toolbox::AFX; // d'oh - now all my clients are forced to enjoy this entire namespace in their translation units! YUK!
class Foo
{
CAccelTable m_hotkeys; // use the darn thing
...
};
现在,我知道我可以做一些恼人而乏味的事情:
class Foo
{
Toolbox::AFX::CAccelTable m_hotkeys; // use the darn thing
...
};
或
class Foo
{
using CAccelTable = Toolbox::AFX::CAccelTable;
CAccelTable m_hotkeys; // use the darn thing
...
};
我有这个权利吗?
有更好的方法吗?这似乎是令人讨厌的必须经历成堆的标题,而不仅仅是为客户端标题添加单个using namespace
,但必须在每个使用它们的类或类型中使用别名命名每个类或类型!这相当于大量的编辑。