如何在 C++11 之前实现 `final` 语义?

问题描述 投票:0回答:1

C++11 引入了

final
说明符,它允许基类防止派生类中的虚函数的派生或重写。

如何对 C++11 之前的类继承和函数重写实施类似的约束?

c++ c++11 final
1个回答
0
投票

可以使用虚拟继承和类友谊来实现。

class seal
{
    friend class impl1;
    friend class impl2;
    seal() {} // note it's private!
};

struct interface
{
    virtual ~interface() {}
};

struct impl1 : interface, virtual seal
{};

struct impl2 : interface, virtual seal
{};


struct impl3 : impl2{}; // declaration works...

int main()
{
    impl1 i1;
    impl2 i2;
    impl3 i3; // ...but fails to compile here
}

https://godbolt.org/z/MjKhbaTo8

© www.soinside.com 2019 - 2024. All rights reserved.