嗯,这不是一个真正的编程问题,而是更多关于好/坏的做法
我正在完成我的CSP课程的最终项目,这是一个有几个求解器的库。大多数课程都是模板化的。 AFAIK没有优雅的方法来分离源和头,以获得干净的二进制和开发人员。实际上这里没有真正的二进制文件。代码生成阶段将在最终代码中由编译器完成。
另一方面,我正在使用boost asio库以便携方式进行网络工作。从基础编程课程来看,我知道在标题中使用using namespace
是一种不好的做法。因为这样做会限制最终用户在他/她的私人代码中使用更有限的命名选项,并且更容易发生冲突。
最后,为了使代码清晰,我想在我的代码中unisg namespcae
或using
。我的问题是最好的方法是什么?我做错了吗?目前我在头文件中使用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 ...
答案 0 :(得分:3)
是的,在函数范围内使用using
很好,它不会影响该函数之外的任何内容。
答案 1 :(得分:1)
因为在有限范围内使用using
不会影响包含文件的父命名空间或命名空间,所以我没有看到任何问题。
关于源与声明的分离: boost使用以下方案: 声明驻留在* .hpp文件中,实现在另一个文件中(我无法回想起扩展名atm)。
在hpp htey的末尾包含带有定义的文件。 当然,您必须记住,在标题文件中声明的所有内容对标题也是可见的。所以仍然不允许使用