gpt4 book ai didi

c++ - 如何定义在外部类之外返回枚举 hack 的嵌入式类的方法?

转载 作者:行者123 更新时间:2023-11-27 23:49:07 27 4
gpt4 key购买 nike

我正在尝试实现一个类 vec ,它看起来像 class vector 一切正常,直到我尝试定义一个 嵌入式类方法 在外部类之外返回一个 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 轻松地通过 捕获异常>基类引用。

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

所以问题:

如何在 vec 类之外定义 COutBound::getError

要执行类似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 返回类型为RANGE_ERRORenum hack 值。如果我在界面内定义它就可以了。但我想在外面这样做。 (将接口(interface)与实现分开)。

最佳答案

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

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 是保留的运算符名称。

关于c++ - 如何定义在外部类之外返回枚举 hack 的嵌入式类的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48012550/

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