提问人:Vivek Mangal 提问时间:8/1/2023 最后编辑:Vivek Mangal 更新时间:8/1/2023 访问量:67
动态转换基类到子类的泛型函数
Generic function for dynamic casting base class to child class
问:
我正在处理一个C++项目,我有一个基类A,它可以有许多派生类,如B,C等。
如果可能的话,我想为动态基类编写一个泛型函数到任何子类。所以我写了以下函数:
template<typename T>
optional<T> A::get_if_convertible()
{
optional<T> return_val = none;
using converted_ptr_type = typename std::add_pointer<T>::type;
auto ptr = dynamic_cast<converted_ptr_type>(this);
if (ptr)
return_val = dynamic_cast<T>(ptr);
return return_val;
}
我需要的是,如果是指向对象的指针,那么我返回的派生类对象也应该是.这是动态铸造的正确方法吗?如果指针指向对象,如何处理这种情况?this
const
const
this
const
答:
0赞
Vivek Mangal
8/1/2023
#1
根据专家对问题的评论,我实现了以下通用函数:
template <typename T>
T* A::get_if_convertible() {
return dynamic_cast<T*>(this);
}
template <typename T>
const T* A::get_if_convertible() const {
return dynamic_cast<const T*>(this);
}
客户端只需编写以下代码,即可调用相应的版本:fun()
void fun(const B* b);
void fun(B* b);
int main()
{
auto ptr_A = get_A_ptr();
fun(ptr_A->get_if_convertible<B>());
}
谢谢大家的帮助。
评论
std::optional
dynamic_cast
nullptr
none
dynamic_cast
const A* p
dynamic_cast<B const*>(p)
const B*
B
p
B
nullptr
p
B
dynamic_cast
const