gpt4 book ai didi

c++ - 如何对派生类进行限制?

转载 作者:行者123 更新时间:2023-12-04 14:03:41 25 4
gpt4 key购买 nike

考虑 curiously recurring template pattern ,你能阻止下面的不安全代码编译吗?

template <class Derived>
class Base {
public:
void foo()
{
// do something assuming "this" is of type Derived:
static_cast<Derived*>(this)->bar();
}
};

// This is OK
class A: public Base<A>
{
public:
void bar()
{
// ...
}
};

// Crash and burn, should be prevented by the compiler
class B: public Base<A>
{
//...
};

void f()
{
// undefined behavior: B object was static_cast to A
B{}.foo();
}

有没有办法向 Base 类添加某种限制,以防止 B 类 的定义有效?

最佳答案

你可以制作Base<D>构造函数(或析构函数)私有(private)和 friend D .

你需要添加

A()=default;
B()=default;

公开,但是当你这样做时,B 不能被创建。哪个好。

关于c++ - 如何对派生类进行限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69221924/

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