gpt4 book ai didi

c++ - 允许模拟类继承自最终类

转载 作者:太空宇宙 更新时间:2023-11-03 10:28:15 25 4
gpt4 key购买 nike

我们可以使用新的 C++ 关键字 final 声明一个 final/sealed 不可继承的类。

class Generator final
{

};

这个类可能继承自其他类,可能有也可能没有虚拟(继承或不继承)。但是,如何让它成为 final,同时允许一个类继承它呢?

我们主要需要从真实类派生模拟类(有或没有后期绑定(bind),因此 virtual 并不重要)。如何让它发挥作用:

class MockGenerator : Generator{};

但不允许任何其他继承?

最佳答案

But, how to make it final, yet allow one class to inherit from it?

那是不可能的。

We mostly need to derive a mock class from real class (with or without late-binding, hence virtual isn't important).

如果该类是最终类,您不需要从它派生。如果您确实需要从它派生,它不是最终的。选择一个。

编辑:您可以为您的类添加限制,但这些限制需要自行承担界面费用:

class Generator // not final
{
Generator(); // the only accessible constructor is private

// whitelist who has access to this constructor
friend class MockGenerator;
public:
// no public constructors here except for copy & move

Generator(Generator&);
Generator(Generator&&);
...

// provide controlled access to the private constructor
static Generator make_generator() { return Generator(); }

// rest of API here
};

这是一个类,允许它的工厂和 MockGenerator 特化来调用它的构造函数。不过,这是以阻止琐碎的构造为代价的。

旧代码(不再可编译):

Generator instance;

新代码(由私有(private)构造函数强制执行):

auto instance = Generator::make_generator();

关于c++ - 允许模拟类继承自最终类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26465237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com