缩短嵌套变量名称

时间:2011-08-01 09:49:16

标签: c++ c++11

在下面的代码中,Node_Tstd::shared_ptrelement_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 个答案:

答案 0 :(得分:1)

如果您使用的是C ++ 0x;那么函数root(Node_T&)的第一行可以是,

auto &root_ = Node_T::element_type::root_;
// use root_ now onwards

答案 1 :(得分:1)

您的代码:

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_;

答案 2 :(得分:0)

指针怎么样?

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_一次。