gpt4 book ai didi

c++ - 将包含 void 指针的一对转换为一对其他类型的指针

转载 作者:太空狗 更新时间:2023-10-29 19:57:29 25 4
gpt4 key购买 nike

讨论

我知道转换 void 的正确方法指向其他类型指针的指针是使用 static_cast . (例如,

void *vptr;
...
foo* fptr = static_cast<foo*>(vptr);

)

不过,我拥有的是一对 void指针(即 std::pair<void*, void*> ),我想将其转换为一对其他类型的指针(例如 std::pair<foo*, bar*> )。

我能想到的最天真的方法如下:

std::pair<void*, void*> vpr;
...
std::pair<foo*, bar*> fbpr = std::make_pair(static_cast<foo*>(vpr.first), static_cast<bar*>(vpr.second));

或者从 C++11 开始:

std::pair<void*, void*> vpr;
...
auto fbpr = std::make_pair(static_cast<foo*>(vpr.first), static_cast<bar*>(vpr.second));

问题

有没有更简洁、更优雅或更高效的方式来进行这种转换?

最佳答案

您可以将其分解为 pair_cast 函数:

template <typename D1, typename D2, typename S1, typename S2>
std::pair<D1,D2> pair_cast (const std::pair<S1,S2>& p) {
return { static_cast<D1>(p.first), static_cast<D2>(p.second) };
}

然后像这样调用:

pair_cast<foo*, bar*>(vpr);

Live Demo

关于c++ - 将包含 void 指针的一对转换为一对其他类型的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33953376/

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