0

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

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

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

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

// 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 ...
4

2 回答 2

3

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

于 2013-05-05T17:00:00.600 回答
1

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

关于源与声明的分离:boost 使用以下方案:声明位于 *.hpp 文件中,实现位于另一个文件中(我不记得扩展名 atm)。

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

于 2013-05-05T17:04:59.680 回答