簡體   English   中英

C++ 類中的 C++ 命名空間聲明

[英]C++ namespace declerations inside a C++ class

我計划使用boost.beast實現以下 RESTClient 類。 我在標題中聲明了以下命名空間。

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 << "foo\n"; // without namespace
  }

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM