【发布时间】:2014-04-07 18:11:27
【问题描述】:
我一直在寻找一些关于在头文件中使用 using-declarations 的说明(我四处寻找,但无法完全得到我正在寻找的答案)。到目前为止,我的研究得出的结论是,在 non-global 范围内使用它们是可以的,而命名空间指令则不好。我理解(至少我希望如此:))。
所以在我的示例中,我使用了shared_ptrs,但我需要支持在std:: 命名空间中没有它们但在std::tr1:: 中没有它们的旧编译器。由于使用shared_ptr 的每个类都需要相同的shared_ptr 定义,因此我必须在每个头文件中放置正确的#include 指令和使用声明。所以我把这部分移到了一个单独的头文件中,所以我只有一个需要更改的文件。使用哪个shared_ptr 的决定是通过预处理器指令HAS_SHAREDPOINTER 做出的,如果用户拥有支持std::shared_ptr 的编译器,则会设置该指令。
SharedPtr.h:
#ifndef SHAREDPTR_H_
#define SHAREDPTR_H_
#ifdef HAS_SHAREDPOINTER
#include <memory>
using std::shared_ptr;
#else
#include <tr1/memory>
using std::tr1::shared_ptr;
#endif
#endif /* SHAREDPTR_H_ */
现在在每个使用 shared_ptr 的头文件中,我都包含这个头文件。例如在
ModelPar.h:
#ifndef MODELPAR_H_
#define MODELPAR_H_
#include <string>
#include <set>
#include "SharedPtr.h"
class ModelPar {
private:
std::set<shared_ptr<ModelPar> > connections;
...
};
#endif /* MODELPAR_H_ */
现在我认为我这样做的方式是错误的,因为包含我的任何头文件(使用 shared_ptrs)的用户在他的代码中也有相应的 using 声明。这是坏事,因为用户不知道这一点……等等。所以我将 using 声明放在全局范围内。要么?我对如何正确执行此操作感到困惑和困惑?提前致谢!
【问题讨论】:
标签: file header declaration using