在下面的代码中,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_;
}
答案 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_
一次。