我需要如何声明成员类
How do I need to declare a member class?
我需要使用一个自定义异常类,该类将在顶级类的函数成员中使用。因此,将自定义类作为成员类是合理的。以下是它们目前声明的文件:
conductor.h
:
class conductor
{
//some staff
private:
class bad_index : public std::exception
{
public:
bad_index(int);
virtual const char* what() const noexcept;
private:
int _idx;
};
};
我刚开始用C++编程,还没有学会C++程序员是如何习惯做这些事情的?也许我们应该把类bad_index
作为一个不完整的类型:
class conductor
{
//some staff
private:
class bad_index;
};
并使其在cpp
-文件中完成和实现所有成员功能。什么是正确的方法?
首先,由于bad_index
是私有的,它不能在类外引用,因此它不能在catch(...)
以外的异常处理程序中使用。如果它不是真正需要的(也就是说,该异常仅用于内部使用(,也许不将其作为嵌套类,而是在namespace { ... }
中的实现文件中定义bad_index
就足够了。
如果bad_index
实际上是公共的,从技术上讲,你可以在.h文件中声明它,并在.cpp文件中定义它,但它在类用户的catch
子句中将再次不可用,因为即使通过引用也无法捕获不完整类型的异常,你所能做的就是再次捕获catch(...)
。
如果该类不是顶级类的公共接口的一部分,那么将尽可能少的信息放入头文件中是有意义的,并且forward声明可以很好地完成这项工作。但是,如果所有使用该异常的代码都在一个cpp文件中,那么您也可以完全避免在头中提及它,并在cpp文件内的匿名命名空间中声明。
相关文章:
- 是否可以同时声明一个类成员的常量/非常量?
- 无法将字符串数组声明为类成员而不是字符 (C++)
- 如何使用模板声明成员函数?(不是模板类)
- 在实例化封闭类模板之后,我们可以声明模板类成员的部分专用化吗
- 使用常量变量作为维度将矩阵声明为类成员时出现编译器错误
- 如何在基本模板类中声明成员,其中类型取决于派生类的类型
- C++为什么 int 变量可以声明为类的私有数据成员,但不能声明为字符串变量
- 为什么成员函数指针的类型基于函数实际声明的类
- 错误:类中没有声明成员函数
- 如何使用向前声明的类的成员函数
- 在类(C )中使用模板时未声明成员函数
- 我怎样才能转发声明一个类并稍后在 c++ 中使用其成员功能
- 错误:类中未声明 '' 成员函数
- 在C++中将成员函数的线程声明为类的成员
- 将向量声明为类成员
- 在泛型编程中,需要在派生类中重新声明基类成员函数
- (C++)如何基于条件声明对象类成员
- 无法在头文件中声明 ifstream 类成员
- 将派生对象声明为类中的私有成员时发生编译错误
- 我需要如何声明成员类