在设计一些无异常类时,我有一个类似于这样的继承结构,但是我发现当使用成员函数时,noexcept限定符对工作几乎没有帮助,因为该限定符并没有局限于函数内部。
class Base
{
protected:
Base() noexcept {}
};
class Derived : public Base
{
public:
// error: 'Base::Base()' is protected
Derived() noexcept(noexcept(Base{})) : Base{} {}
// error: 'foo' was not declared in this scope
Derived(int) noexcept(noexcept(foo())) {}
// error: invalid use of 'this' at top level
Derived(float) noexcept(noexcept(this->foo())) {}
void foo() noexcept {}
};
这在C++17中有可能得到改进吗?尝试搜索并没有找到相关结果。目前我只能放弃一些非常丑陋(可能不正确)的尝试,例如noexcept(noexcept(static_cast<Derived*>(nullptr)->foo()))
,但这不能帮助处理受保护的基类构造函数。
当前是否可以声明一个noexcept指定符,引用像这样的受保护的基类方法?noexcept(auto) 可能是相关的,但目前还不可行。我是否忽略了其他任何允许我包括此指定符的内容,或者在那种情况下我必须省略它?
Base()
不可访问的原因。 - Kurt Stutsman