gpt4 book ai didi

c++ - 如何实现编译时检查 CRTP 中的向下转换是否有效?

转载 作者:可可西里 更新时间:2023-11-01 17:29:36 27 4
gpt4 key购买 nike

我有一个普通的旧 CRPT(请不要被访问限制分心 - 问题不在于它们):

 template<class Derived>
class Base {
void MethodToOverride()
{
// generic stuff here
}
void ProblematicMethod()
{
static_cast<Derived*>(this)->MethodToOverride();
}
};

像往常一样打算像这样使用:

 class ConcreteDerived : public Base<ConcreteDerived> {
void MethodToOverride()
{
//custom stuff here, then maybe
Base::MethodToOverride();
}
};

现在 static_cast 困扰着我。我需要一个向下转换(而不是向上转换),所以我必须使用显式转换。在所有合理的情况下,转换都是有效的,因为当前对象确实属于派生类。

但是,如果我以某种方式更改层次结构并且现在强制转换变得无效怎么办?

在这种情况下,我可以以某种方式强制执行编译时检查以确保显式向下转换有效吗?

最佳答案

在编译时你只能检查静态类型,这就是 static_cast 已经做的。

给定一个 Base*,它在运行时只能并且只能知道它的动态类型是什么,也就是说,它是否实际指向ConcreteDerived 或其他东西。所以如果你想检查这个,它必须在运行时完成(例如通过使用 dynamic_cast)

关于c++ - 如何实现编译时检查 CRTP 中的向下转换是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5907731/

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