2个内部类之间的对话

时间:2013-07-05 16:00:19

标签: c++ generics casting

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

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

我正在尝试将抽象的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

我做错了什么?

1 个答案:

答案 0 :(得分:1)

由于转换无法由编译器隐式完成,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,否则会导致未定义的行为