C++ C++类中的命名空间降级

C++ namespace declerations inside a C++ class

本文关键字:C++ 降级 命名空间      更新时间:2023-10-16

我有以下 RESTClient 类,我计划使用boost.beast来实现。我在标头中声明了以下命名空间。

namespace beast = boost::beast;
namespace http = beast::http;
namespace net = boost::asio;
using tcp = boost::asio::ip::tcp;

但是我不想污染全局命名空间。我希望在类中声明名称。我尝试了此处声明的技术C++错误会避免全局命名空间。 这似乎无济于事。将上述命名空间降级带到类内部的优雅方法

class RESTClient {
public:
explicit RESTClient(std::shared_ptr<net::io_context> ioc, std::shared_ptr<Logger> logger, std::shared_ptr<Configuration> config);
virtual ~RESTClient();
private:
std::shared_ptr<Logger> m_logger;
};

该语言根本不允许您将using directive用于类中的命名空间。因此,编译器会拒绝如下所示的代码。即使使用命名空间别名也在类范围内也是一个错误。

class MyClass {
using namespace std;  // error
namespace s = std; // error
};

最有可能的解决方案是在函数范围内声明命名空间(using namespace声明(或命名空间别名。

struct X {
void foo() {
using namespace std;
cout << "foon"; // without namespace
}
void bar() {
std::cout << "barn"; // using fully qualified name
}
};