Я добавляю визуализаторы для некоторых наших типов в autoexp.dat. Даже с тем блогом, на который все ссылаются на (, даже ребята из Microsoft! )Временами это была борьба.
Но я совершенно озадачен визуализатором дерева #. Во-первых, это сообщение в блоге кажется полным дыр в его описании (и ни в каком другом материале, который я смог найти по адресам, которые -но другие явно заставили его работать ). В частности, кажется, что есть некоторые волшебные случаи, когда он знает, что нужно разыменовать указатель -, но я не могу быть уверен, что перепроектировал намерение. Также кажется, что существует некоторая двусмысленность между использованием $c и $e. AFAICS они кажутся взаимозаменяемыми -, возможно, оба разрешены для удобства чтения? Или они действительно означают разные вещи (, например, в блоге используется $e, а визуализаторы stl, поставляемые с VS2008, используют $c ).
Но чего действительно не хватает, так это объяснения того, как все это сочетается друг с другом.Я бы предположил, что это будет следовать этому процессу:
Очевидно, есть алгоритм навигации влево/вправо, который я упустил. Это не слишком важно. Более важно то, какие значения учитываются на каждом этапе и когда происходит разыменование.
Кажется, это единственный процесс, который я могу себе представить, который соответствует примерам, которые я видел. Но мне не удалось заставить его работать с нашей реализацией дерева. Я просто получаю (ошибку ), где должны отображаться #дочерние элементы дерева (Я получаю одну (ошибку )для каждого узла, поэтому я предполагаю, что размер фиксируется правильно ). Я пробовал все возможные варианты, которые я могу придумать -несколько раз!
Другая вещь, которая меня озадачивает, заключается в том, что многие примеры, которые я видел, в том числе связанные stl, выполняют переход от головы к родительскому (или аналогичному )и пропускают головной узел. Почему они это делают?
Вот визуализатор, который я использую (в одной из форм, которые я пробовал -, и имена были изменены на защищенные... корпоративные):
MyTree<*,*,*>{
children(
#(
[raw members]: [$c,!],
#tree
(
head : $c.m_root.m_p,
size : $c.m_size,
left : left.m_p,
right : right.m_p
) : $e.value
)
)
}
А вот какой-то псевдо-код для моих древовидных классов:
MyTree:
Ptr m_root
int m_size
Node:
ValueT value
Ptr left
Ptr right
... где Ptr — интеллектуальный указатель, содержащий необработанный указатель в m _p.
Любая помощь будет принята с благодарностью.