将一对包含空指针的指针强制转换为一对其他类型的指针
Cast a pair containing void pointers to a pair of pointers of other type
讨论
我知道将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);
实时演示
相关文章:
- 结构和双指针隐藏在其他结构中,多层混淆
- 这个失败的测试是将零添加到空指针未定义的行为、编译器错误还是其他什么?
- 包含指向其他结构的指针向量的结构
- 我可以使用 decltype() 或其他东西通过指针获取真实类型吗?
- 在指针中对其他信息进行编码
- char* 除了作为C++中的指针之外,还有其他功能吗?
- C++ 指向其他类函数的指针函数
- 当动态库中的指针仍被其他库使用时,如何删除该指针
- 指向用随机指针归档的其他类对象的指针的c++向量
- Sizeof返回的是指针大小,而不是数组大小.有其他方法可以找到尺寸吗
- 如何知道指针是否已在其他地方释放
- 为什么C++让你把"->"符号放在指针上,把"."符号放在其他所有东西上?
- fprintf 不打印到文件,当文件指针在其他地方声明时
- QPointer::clear() 是删除其引用的指针,还是"Clears this QPointer object."其他含义?
- 与其他语言相比的 Ruby 和指针
- 如何在没有作弊引擎的情况下从其他应用程序获取指针地址?
- 为什么可以将所有类型转换为其他指针类型?
- 将指针类方法作为参数传递给其他类方法C
- 将指针与其他数据相关联
- 如何复制包含指向其他几个成员之一的指针的对象?