两个内部班级之间的对话

Conversation between 2 inner classes

本文关键字:之间 对话 内部 两个      更新时间:2023-10-16

我有一个叫List的抽象类和一个叫AbstractIterator的内部类。

我有一个从List继承的名为ArrayList的类和一个从List::AbstractIterator继承的内部类Iterator。

我试图在抽象List::AbstractIterator和实现ArrayList::Iterator之间进行转换。这是代码的一部分:

        bool operator!=(typename List<T>::AbstractIterator& it) {
            typename ArrayList<T>::Iterator itt = it;

这是我的错误:

[Error] conversion from 'List<int>::AbstractIterator' to non-scalar type 'ArrayList<int>::Iterator' requested

我做错了什么?

由于编译器无法隐式完成转换,并且List<T>::AbstractIterator是一个抽象类,因此需要使用dynamic_cast来转换it

bool operator!=(List<T>::AbstractIterator& it)
{
    try
    {
        ArrayList<T>::Iterator itt = dynamic_cast<ArrayList<T>::Iterator&>(it);
        // ... other code
    }
    catch(std::bad_cast& e)
    {
        // ... handle case where it is not an ArrayList<T>::iterator
    }
    // ... other code such as return if necessary
}

请注意,dynamic_cast在无法转换为引用时抛出std::bad_cast。当转换为指针类型时,当无法完成转换时,它将返回nullptr



可以使用static_cast,但不能保证it的类型为ArrayList<T>::Iterator,否则会导致未定义的行为