我正在做一个项目,我必须使用算法来查看给定结构是否在结构上等效。为此,在课堂上给出了一个例子:
T1 = struct {a: int, p: pointer to T2}
T2 = struct {c: int, q: pointer to T3}
T3 = struct {a: float, p: pointer to T1}
该算法表明它们中没有一个在结构上彼此相同。 我们的部分是在c ++中实现算法,输入(我们选择的语言...我的是VB.net)文件和输出结构在结构上是等价的。
首先,指针未在vb.net中定义。因此,将该部分排除,但是可能是声明变量而不是指针吗?例如,
T1 = struct {a: int, p: T2}
T2 = struct {c: int, q: T3}
T3 = struct {a: float, p: T1}
在vb.net中编码这些结构(是的,我们也编写输入文件)要求结构已经预定义。那有可能吗?如果是这样的话?
答案 0 :(得分:0)
您的任务是否真的要解析输入语言?这是一项非常复杂的任务,而在.NET中有一种称为Reflection的技术,允许您在运行时分析已编译的类型,而无需进行任何解析。通过使用C++ for .NET和Reflection,您可以为您节省大量的工作。您必须动态加载VB程序集。请参阅:Programming with Reflection in the .NET Framework Using Managed C++
VB(和C#也是如此)不能使用指针,而是使用引用。引用只是指针的高级抽象。虽然您将指针视为引用内存中的位置,但引用只是指向对象的变量。当GC(垃圾收集器)回收并重新组织内存时,对象的物理地址可以在其生命周期内发生变化,但引用仍然是相同的。
结构是值类型,因此T1 = struct {a: int, p: T2}
字段p
不是引用。相反T2
(这是一个结构)嵌入到T1
中!如果您想要引用,请改用类。
在VB中,引用类型的变量自动成为引用。没有特殊的语法可以遵循此引用(例如*
或->
),只是点语法。
Dim p As Person ' p is a reference.
p = New Person()
Console.WriteLine(p.LastName);
请参阅: