我只是总结了有关在VBA中实现数字树 (Trie)的信息。我不是问如何做到这一点所以请不要发布你的解决方案 - 关于类模块中固定长度字符串的具体问题出现在本文末尾。
Trie
完全取决于效率和性能,因此大多数其他编程语言使用Char
数据类型来表示TrieNodes
的成员。由于VBA没有Char
数据类型,我正在考虑伪造它并使用带有1个字符的fixed-length String。
Byte
和一个简单的函数在Chr()
和Asc()
或Enum之间进行转换,或将delcare转换为private str as String * 1
并利用get / let属性,但这不是重点。请继续关注,因为...... 根据Public Statement
on Microsoft Help Page,你不能在类模块中声明一个固定长度的String变量。
我无法为此约束找到任何合理的解释。
任何人都可以了解为什么这样的限制适用于VBA中类模块中的固定长度字符串?
答案 0 :(得分:3)
VBA / VB6运行时严重依赖于COM系统(oleaut32等),这强制执行一些规则。
您可以在VB“stuff”之间导出类flile,但如果您将其作为COM对象发布(或理论上可以发布)它必须能够在其接口描述/类型库中描述“固定长度字符串”,以便说C ++客户端可以使用它。
固定长度的字符串是“特殊的”,因为它具有活动行为,即它不是一个哑数据类型,它的行为有点像一个类;例如,它总是填充 - 如果你赋予它它将有尾随空格,在VBA中编译器添加生成的代码来获得该行为。 C ++使用者不会意识到字符串的固定长度性质,因为接口不能描述它/不支持相应的类型(String是BSTR),这可能导致问题。
字符串是BSTR类型,就像字节数组一样,如果你使用其中一个,你仍会失去填充语义。