标题和模板类中包含名称空间

时间:2013-05-05 16:17:15

标签: c++ coding-style

嗯,这不是一个真正的编程问题,而是更多关于好/坏的做法

我正在完成我的CSP课程的最终项目,这是一个有几个求解器的库。大多数课程都是模板化的。 AFAIK没有优雅的方法来分离源和头,以获得干净的二进制和开发人员。实际上这里没有真正的二进制文件。代码生成阶段将在最终代码中由编译器完成。

另一方面,我正在使用boost asio库以便携方式进行网络工作。从基础编程课程来看,我知道在标题中使用using namespace是一种不好的做法。因为这样做会限制最终用户在他/她的私人代码中使用更有限的命名选项,并且更容易发生冲突。

最后,为了使代码清晰,我想在我的代码中unisg namespcaeusing。我的问题是最好的方法是什么?我做错了吗?目前我在头文件中使用using内部函数(不是在全局范围内),如下所示:

// File : abt-solver.h
template<typename valueType>
inline void AIT::ABT_Solver<valueType>::connect() {
    using boost::asio::ip::tcp;    // <===== Here
    using namespace std;           // <===== And here
    tcp::resolver::query query(this->address, this->portNumber);
    tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
    tcp::resolver::iterator end;
    boost::system::error_code error = boost::asio::error::host_not_found;
    while (error && endpoint_iterator != end) {
    // blah blah blah ...

2 个答案:

答案 0 :(得分:3)

是的,在函数范围内使用using很好,它不会影响该函数之外的任何内容。

答案 1 :(得分:1)

因为在有限范围内使用using不会影响包含文件的父命名空间或命名空间,所以我没有看到任何问题。

关于源与声明的分离: boost使用以下方案: 声明驻留在* .hpp文件中,实现在另一个文件中(我无法回想起扩展名atm)。

在hpp htey的末尾包含带有定义的文件。 当然,您必须记住,在标题文件中声明的所有内容对标题也是可见的。所以仍然不允许使用