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

Jer*_*oen 3 c++ methods constructor exception

我正在编写一个自定义的Exception类,其中包含一些额外的功能std::exception.我Exception(std::string details) : details(details) {}在我的Exception类中添加了一个自定义构造函数.

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

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

jua*_*nza 7

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

class FileNotAccessibleException : public Exception
{
 public:
    using Exception::Exception;
 ...
};
Run Code Online (Sandbox Code Playgroud)

Bjarne Stroustrup的C++ 11 FAQ上查看有关继承构造函数的更多信息.

注意:这不适用于预C++ 11实现,并且是最新的C++ 11语言功能之一,可以添加到流行的编译器,如G ++和CLANG.