【问题标题】:using-declaration may not name namespaceusing-declaration 不能命名命名空间
【发布时间】:2020-09-05 07:32:36
【问题描述】:

如果我有这样的文件,一切都会按预期进行:

#include <filesystem>
#include <iostream>
int main() {
   std::filesystem::path o = "C:\\Windows\\write.exe";
   auto s = o.parent_path();
   std::cout << s << std::endl;
}

但是,如果可能的话,我想使用这样的一行:

filesystem::path o = "C:\\Windows\\write.exe";

我试过了,但我得到一个错误:

// using-declaration may not name namespace 'std::filesystem'
using std::filesystem;

这也是错误的:

using namespace std::filesystem;
// error: 'filesystem' has not been declared
filesystem::path o = "C:\\Windows\\write.exe";

有可能做我正在尝试的事情吗?

【问题讨论】:

    标签: c++ namespaces c++17 using


    【解决方案1】:

    您可以使用命名空间别名,例如

    namespace filesystem = std::filesystem;
    

    这是一个演示程序

    #include <iostream>
    
    namespace A
    {
        namespace B
        {
            int x;
        }
    }
    
    int main() 
    {
        namespace B = A::B;
        
        B::x = 10;
        
        std::cout << B::x << '\n';
        
        return 0;
    }
    

    它的输出是

    10
    

    【讨论】:

    • 这样一个精确而简单的答案。不错!