为模板的嵌套 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
}
我在头文件中有以下内容:
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
}