我只是在教自己C++命名空间(来自C#背景),我真的开始认为,即使C++比大多数其他语言做得更好,嵌套命名空间也不是其中之一!
我是否正确地认为,为了声明一些嵌套的命名空间,我必须执行以下操作:
namespace tier1
{
namespace tier2
{
namespace tier3
{
/* then start your normal code nesting */
}
}
}
Run Code Online (Sandbox Code Playgroud)
相反:
namespace tier1::tier2::tier3
{
}
Run Code Online (Sandbox Code Playgroud)
àlaC#?
当我需要转发声明时,这变得更加疯狂:
namespace tier1
{
namespace tier2
{
namespace forward_declared_namespace
{
myType myVar; // forward declare
}
namespace tier3
{
/* then start your normal code nesting */
class myClass
{
forward_declared_namespace::myType myMember;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
请记住,我开发的典型系统包括:
MyCompany::MySolution::MyProject::System::[PossibleSections]::Type
Run Code Online (Sandbox Code Playgroud)
这就是为什么你不倾向于在C++示例中看到很多名称空间的使用?或者通常只有单个(非嵌套)命名空间?
UPDATE
对于任何有兴趣的人,这就是我最终解决这个问题的方法.
我正在研究基于位的B/W/Greyscale预编译字体格式,并且在阅读或编写格式时遇到了问题,(我无法确定问题的位置.(我确实有基于B/W位的版本工作,但是别名字体看起来不太好,正如您可以想象的那样,特别是在使用320x200像素屏幕时))但是决定只使用BinaryWriter比写入更容易当我拉动图像数据时,一个bool [].
文件中像素的基本格式如下所示:
1 - 白色像素(最短,因为这将是大多数像素)
00 - 黑色像素(无理由为纯黑色像素写入10位,其中有合理的数量)
01 - 灰度像素,后跟1个字节,描述像素的阴影
现在,编写所需信息的一切都很好,花花公子,因为这是全部字节,但默认的.Net 4.0 BinaryWriter将布尔值写为完整字节,并且可以想象,这会否定基于位的使用格式.所以我想知道,有没有BinaryWriter,(和BinaryReader)实现那里的基于位的
编辑:我最终创建了自己的.(请参阅代码的答案.)
我正在研究一种语言(外部字节码)的编译器,并且正在使用System.Reflection.Emit.
现在,当我在反射器中打开生成的程序集时,一切看起来都很好,并且它重新编译为C#也很好(并运行),但是当我尝试运行生成的main函数时,我得到一个InvalidProgramException:
"Common Language Runtime检测到无效程序."
它可能只是导致问题的单个操作码,但是,因为主要功能使用100多个操作码,我无法确定导致问题的操作码.
每个操作码都非常复杂,因此手动测试每个操作码是不行的.
有没有办法让.NET告诉我它在函数中检测到无效程序的位置?
如果没有,是否还有其他工具可用于确定问题的根源?