Сокращение имени вложенной переменной - PullRequest
2 голосов
/ 01 августа 2011

В приведенном ниже коде Node_T - это std::shared_ptr, element_type будет Node< T,U >, и этот тип имеет член с именем root_;

Есть ли способ как-то сократить это: Node_T::element_type::root_ до root_?

template<class Node_T>
const Node_T& root(Node_T& node)
    {
        Node_T::element_type::root_ = node;
        while (Node_T::element_type::root_->parent_)
        {

            Node_T::element_type::root_ = Node_T::element_type::root_->parent_;

        }

        return Node_T::element_type::root_;
    }

Ответы [ 3 ]

1 голос
/ 01 августа 2011

Ваш код:

Node_T::element_type::root_ = node;

Из приведенного выше кода кажется, что тип Node_T::element_type::root_ просто Node_T, потому что тип node равен Node_T. Если так, то почему бы вам просто не написать:

Node_T tmp = node;
while (tmp->parent_)
{
    tmp = tmp->parent_;
}
Node_T::element_type::root_  = tmp;
return Node_T::element_type::root_;
1 голос
/ 01 августа 2011

Если вы используете C ++ 0x;тогда первая строка функции root(Node_T&) может быть,

auto &root_ = Node_T::element_type::root_;
// use root_ now onwards
0 голосов
/ 01 августа 2011

Как насчет указателя?

template<class Node_T>
const Node_T& root(Node_T& node)
    {
        const Node_T * root_ = &node;
        while (root_->parent_)
        {
            root_ = root_->parent_;
        }
        return Node_T::element_type::root_ = *root_;
    }

Это также перезаписывает Node_T::element_type::root_ только один раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...