gpt4 book ai didi

c++ - 检查变量是否属于具有特定基类的类

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:03:12 25 4
gpt4 key购买 nike

is_base_of检查类 A 是否是 B 的基类。但是如果我没有变量的类型怎么办?

假设我有五个类 A、B、C、D 和 E,并且 D 和 E 分别派生自 A 和 B。 C 仅派生自 A。现在我有一个指向 A 的指针,我想知道是否可以将该指针转换为 B。在这种情况下,我想知道我的 A 指针是否指向 D 或 E 对象,以便我可以将指针转换为 B 对象。

我尝试了以下方法,但没有用。

void foo(const std::shared_ptr<A> & ptr) {
if (std::is_base_of<B, decltype(*ptr)>::value) {
doSomething(std::static_pointer_cast<B>(ptr));
}
}

编辑:foo 不是模板函数,A 和 B 只是我现有类的占位符。

最佳答案

如果foo 是模板函数,则必须在模板参数列表中在A 之前定义B。您还必须在调用 foo 时专门键入 B。

如果您的代码是按原样提供的,那么您必须使 foo 成为模板,并将 A 作为模板的参数。

例子:

#include <memory>

template <typename B>
void doSomething(std::shared_ptr<B> &ptr)
{

}

template <typename B, typename A>
void foo(const std::shared_ptr<A> & ptr) {
if (std::is_base_of<B, decltype(*ptr)>::value) {
doSomething(std::static_pointer_cast<B>(ptr));
}
}

class A { };

class B : public A { };

int _tmain(int argc, _TCHAR* argv[])
{
std::shared_ptr<A> a(new B);

foo<B>(a);

return 0;
}

关于c++ - 检查变量是否属于具有特定基类的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29287569/

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