gpt4 book ai didi

c++ - 类型严格依赖于另一个(嵌套类) - 语法

转载 作者:行者123 更新时间:2023-11-30 02:34:47 25 4
gpt4 key购买 nike

假设我们在容器类中有迭代器类。我们可以声明如下:

class Container{
public:
class iterator{
public:
iterator operator++();
// .. further methods
}

}

但是,头文件会变得极其丑陋且不可读。我在想,我们可以做以下事情:

class Container{
public:
class Iterator;
};

class Container::Iterator{
public:
//methods
}

但我一直遇到一些语法错误,我开始思考,通常不可能以以下方式声明事物。

我的问题是我们如何才能在代码可读性方面有效地做到这一点。有什么合理的方法可以做到这一点吗?

更新

我目前面临的语法错误是:

template <typename ValType, size_t size>
class ReversedVector{
public:
class Iterator;
ReversedVector();
void pushFront(const ValType&);
Iterator begin();
Iterator end();

friend class Iterator;

private:
ValType m_rawContainer[size];
size_t m_currentPosition;
};

在这个声明之后我有一个完整的迭代器声明

当我尝试实现开始时:

template <typename ValType, size_t size>
Iterator ReversedVector<ValType, size>::begin(){
return Iterator(*this, m_currentPosition);
}

我得到:

C2143: syntax error : missing ';' before 'Containers::ReversedVector::begin'

最佳答案

template <typename ValType, size_t size>
Iterator ReversedVector<ValType, size>::begin(){
return Iterator(*this, m_currentPosition);
}

Iterator 是嵌套类型,因此它不能单独出现在返回类型所在的类上下文之外。您需要:

template <typename ValType, size_t size>
typename ReversedVector<ValType, size>::Iterator ReversedVector<ValType, size>::begin() {
return Iterator(*this, m_currentPosition);
}

或:

template <typename ValType, size_t size>
auto ReversedVector<ValType, size>::begin() -> Iterator {
return Iterator(*this, m_currentPosition);
}

关于c++ - 类型严格依赖于另一个(嵌套类) - 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34324201/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com