Идиоматический способ обхода узлов по ссылкеC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Идиоматический способ обхода узлов по ссылке

Сообщение Anonymous »

Начиная со строки, представляющей путь к узлу, из которого я хочу получить данные, например «a.b.c». В настоящее время код, который я использую для пересечения иерархии узлов и достижения этого узла, выглядит примерно так (возможно, не компилируется, но суть вы поняли):

Код: Выделить всё

string keyPath("a.b.c");
vector keyPieces(split(keyPath, "."));

const YAML::Node *currNode = &rootNode;
for_each(begin(keyPieces), end(keyPieces), [&](const string &key)
{
// for simplicity, ignore indexing on a possible scalar node
// and using a string index on a sequence node
if ((*currNode)[key])
{
currNode = &((*currNode)[key]);
}
});

// assuming a valid path, currNode should be pointing at the node
// described in the path (i.e. currNode is pointing at the "c" node)
Приведенный выше код, кажется, работает правильно, но мне интересно, есть ли лучший способ выполнить трансверсальное назначение узла. Использование прямого назначения узла (

Код: Выделить всё

currNode = currNode[key]
), вместо указателя/адреса (

Код: Выделить всё

currNode = &((*currNode)[key])
), похоже, в конечном итоге создает ссылки между узлами вместо перехода от одного узла к другому.

Есть ли «более чистый» или более идиоматический способ добиться этого?

Подробнее здесь: https://stackoverflow.com/questions/146 ... -reference
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»