将包含 void 指针的一对转换为一对其他类型的指针
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);
讨论
我知道将 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);