为模板的嵌套 class 添加别名

Aliasing a nested class of a template

我在头文件中有以下内容:

template <typename T>
class RingDeque {
  ...
  struct Iterator {
    using reference = T&;
    reference operator*() const;
  }
}

并且我想在cpp文件中实现operator*()功能。我目前在 cpp 文件中有以下内容:

template <typename T>
typename RingDeque<T>::Iterator::reference RingDeque<T>::Iterator::operator*()
    const {
  ... some implementation
}

我可以为 RingDeque<T>::Iterator 起一个类型的别名吗?也许是这样的?

template <typename T>
using MyIterator = RingDeque<T>::Iterator;
template <typename T>
MyIterator::reference MyIterator::operator*()
    const {
  ... some implementation
}

我已经尝试了很多变体,但无法在方法的实现中替换类型。例如,使用以下代码:

template <typename T>
using MyIterator = typename RingDeque<T>::Iterator;

template <typename T>
RingDeque<T>::Iterator::reference MyIterator::operator*() const {
  return this->_data[0];
}

我收到以下错误消息:

ringDeque.cpp:49:1: error: missing 'typename' prior to dependent type name 'RingDeque<T>::Iterator::reference'
RingDeque<T>::Iterator::reference MyIterator::operator*() const {
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
typename 
ringDeque.cpp:49:35: error: 'MyIterator' is not a class, namespace, or enumeration
RingDeque<T>::Iterator::reference MyIterator::operator*() const {
                                  ^
ringDeque.cpp:46:1: note: 'MyIterator' declared here
using MyIterator = typename RingDeque<T>::Iterator;
^
2 errors generated.

我只想使用尾随 return 类型并完成它。

template <typename T>
auto RingDeque<T>::Iterator::operator*() const -> reference {
  //... some implementation
}

如果你真的想使用别名模板,那么你一定不要忘记它是也是,顾名思义,一个模板。

template <typename T>
using MyIterator = RingDeque<T>::Iterator;
template <typename T>
typename MyIterator<T>::reference RingDeque<T>::Iterator::operator*()
    const {
  //... some implementation
}