gpt4 book ai didi

C++ bad_cast 异常转换 *this 到派生模板类

转载 作者:搜寻专家 更新时间:2023-10-31 01:00:18 27 4
gpt4 key购买 nike

我正在尝试一个虚拟模板函数实现。我在将 this 指针转换为指向子类模板的指针时可以正常工作,但是当我将 *this 转换为对子类的引用时我无法正常工作,为什么?

template <typename T> struct BB; // forward reference (not bound until instantiation in main)
struct AA
{
virtual ~AA(){}
template <typename T>
void operator()(T && t)
{
dynamic_cast<BB<T>*>(this)->operator()(std::forward<T>(t)); // works!
dynamic_cast<BB<T>&>(*this)(std::forward<T>(t)); // compiles but throws bad_cast
}
};
template <typename T>
struct BB : AA
{
void operator()(T t) { std::cout << "BB::operator()" << std::endl; }
};

int main()
{
BB<int> bb;
int k = 5;
static_cast<AA&>(bb)(k);
}

最佳答案

在您的电话中static_cast<AA&>(bb)(k); , T推导为 int & ,以及包含 *this 的最派生对象不是 BB<int &> 类型.因此,两次转换都失败了,并且您的指针间接产生了未定义的行为。

关于C++ bad_cast 异常转换 *this 到派生模板类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31358549/

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