繁体   English   中英

我需要如何声明成员类?

[英]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 ++程序员是如何习惯做这些事情的? 也许我们应该将class bad_index作为这样的不完整类型:

class conductor
{
    //some staff
private:
    class bad_index;
};

并使其完整并实现cpp -file中的所有成员功能。 正确的方法是什么?

首先,由于bad_index是私有的,因此无法在类外部进行引用,因此除catch(...)之外,不能在异常处理程序中使用它。 如果不是真正需要它(也就是说,该异常仅供内部使用),那么就不使其成为嵌套类,而在namespace { ... }中的实现文件中定义bad_index可能就足够了。

如果bad_index实际上是公共的, bad_index技术上讲,您可以在.h文件中声明它,并在.cpp文件中定义,但是它在类用户的catch子句中将再次不可用,因为即使这样,您也无法捕获不完整类型的异常参考,您可以做的只是再次catch(...)

如果该类不是顶级类的公共接口的一部分,则将尽可能少的有关它的信息放入头文件中是有意义的,而前向声明则可以很好地完成此工作。 但是,如果所有使用该异常的代码都在一个cpp文件中,那么您也可以完全避免在标头中提及它,并在cpp文件内的匿名命名空间中声明。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM