gpt4 book ai didi

C++ 类中的 C++ 命名空间声明

转载 作者:行者123 更新时间:2023-12-01 14:58:06 28 4
gpt4 key购买 nike

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

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

但是我不想污染全局命名空间。我希望在类中声明命名空间。我尝试了这里声明的技术 C++ mistakes avoid global namespaces .
这似乎没有帮助。将上述命名空间声明带到类内部的优雅方法是什么
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 << "foo\n"; // without namespace
}

void bar() {
std::cout << "bar\n"; // using fully qualified name
}
};

关于C++ 类中的 C++ 命名空间声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60219643/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com