如何定义一个嵌入式类的方法,该方法返回外部类之外的枚举黑客?

问题描述 投票:0回答:1

我试图实现一个类vec看起来像class vector一切正常,直到我试图定义一个embedded class method返回外部类外的enum hack值。

这是我的界面:

#define MAX  1000

template <class T>
class vec{
    public:
        // ctors, dtor, oper. over...
        // Exeption handling
        class CExcep {
            public:
                virtual void what()const = 0;
        };

        class COutBound : public CExcep {
            public:
                enum RANGE_ERROR {
                    NEGATIVE, TOO_BIG
                };

                COutBound(const int, const RANGE_ERROR);

                const int getIndex()const;// { return index};
                const RANGE_ERROR getError()const;// { return or ; }

                virtual void what()const;
            private:
                const int index;
                const RANGE_ERROR or;
        };

    private:
        // some member data here
};

上面我在我的类CExcep中嵌入了vec基类,并且我使用继承来轻松地使用catch通过base class引用捕获异常。

  • 为简洁起见,我没有提供实施。

所以问题:

如何在课堂COutBound::getError之外定义vec

要做那样的COutBound::getIndex,我设法做到了:

// ok
template<class T> 
const int vec<T>::COutBound::getIndex()const{
    return index;
}

但:

// Error here?
template<class T>
const vec<T>::COutBound::RANGE_ERROR
vec<T>::COutBound::getError()const{
    return or;
}

简单地说getError返回enum hack类型的RANGE_ERROR值。如果我在界面内定义它就可以了。但我想在外面这样做。 (与实现分开的接口)。

c++ enums
1个回答
3
投票

您需要将typename用于RANGE_ERROR,因为它是一个依赖类型:

template<class T>
typename vec<T>::COutBound::RANGE_ERROR
vec<T>::COutBound::getError()const{
    return or;
}

或C ++ 11尾随返回:

template<class T> auto
vec<T>::COutBound::getError()const -> RANGE_ERROR {
   return orx;
}

此外,简单返回类型的const限定符也没有用,or是保留的运算符名称。

© www.soinside.com 2019 - 2024. All rights reserved.