防止重新定义构造函数定义的方法

Way To Prevent To Redefine Constructor Definitions

本文关键字:定义 构造函数 方法 新定义      更新时间:2023-10-16

我正在编写一个自定义的异常类,在std::exception类的基础上有一些额外的功能。我向 Exception 类中添加了一个自定义构造函数Exception(std::string details) : details(details) {}

后来,当我使用类FileNotAccessibleException扩展 Exception 类并抛出它时,我收到一个编译错误,指出no matching function for call to ‘FileNotAccessibleException::FileNotAccessibleException(std::basic_string<char>)’当我将方法FileNotAccessibleException(std::string details) : Exception(details) {}添加到我的类时,它确实工作正常。

有没有办法使构造函数工作,而不必为所有类重新定义构造函数?

您可以使用 using 声明继承基类的构造函数:

class FileNotAccessibleException : public Exception
{
 public:
    using Exception::Exception;
 ...
};

有关继承构造函数的更多信息,请参阅 Bjarne Stroustrup 的 C++11 FAQ。

注意:这不适用于 C++11 之前的实现,并且是添加到流行编译器(如 G++ 和 CLANG)中的最后 C++11 语言功能之一。