作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我写了一些头文件。我想单独声明命名空间层次结构(为了清楚起见),然后声明函数和类。对我来说,它看起来像是文档中的目录。这对我来说非常方便:在一个地方查看 namespace 的完整层次结构。我这样写:
// Namespaces hierarchy:
namespace Bushman{
namespace CAD_Calligraphy{}
//...
}
// Declarations of classes and functions
class Bushman::CAD_Calligraphy::Shp_ostream{
public:
explicit Shp_ostream(std::ostream& ost);
};
但是 MS Visual Studio 对这种创建头文件的方式大喊大叫。我应该这样写:
namespace Bushman{
namespace CAD_Calligraphy{
class Shp_istream{
public:
explicit Shp_istream(std::istream& ist);
};
}
}
为什么第一个变体不起作用?这是C++还是IDE的限制?
附言我的附加问题是 here .
谢谢。
最佳答案
限制在 §9/1 中:“如果类头名称包含嵌套名称说明符,类说明符应指先前直接在类中声明的类或嵌套名称说明符所指的 namespace [...]”。在换句话说,类名的第一次出现不能在类似于 Bushman::CAD_Calligraphy::Shp_ostream
。
您可以做的是在您的初始文件中添加前向声明层次结构声明:
// Namespaces hierarchy:
namespace Bushman{
namespace CAD_Calligraphy{
class Shp_ostream;
//...
}
//...
}
// Declarations of classes and functions
class Bushman::CAD_Calligraphy::Shp_ostream{
public:
explicit Shp_ostream(std::ostream& ost);
};
根据标题的组织方式,这甚至可能是从人的角度来看更好:您的标题以一种其中定义的索引。
关于c++ - 为什么不能在头文件中单独写命名空间的层级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17611000/
我正在处理这个线程:HierarchyID:HierarchyID: Get all descendants for a list of parents 我有一个使用 HierarchyID 的表,我
我是一名优秀的程序员,十分优秀!