Add a VectorCast function that safely casts from
Vector<Offset<T>> to Vector<Offset<U>> if U is a base class of T. This is useful for when you want to generically iterate over a vector of objects that derive from flatbuffers::Table. Change-Id: I59161e3b9f40501f72e02b46509be9dc8ab86c6b
This commit is contained in:
parent
7a36419f24
commit
89041a1686
|
@ -483,6 +483,20 @@ private:
|
|||
VectorOfAny(const VectorOfAny&);
|
||||
};
|
||||
|
||||
#ifndef FLATBUFFERS_CPP98_STL
|
||||
template<typename T, typename U>
|
||||
Vector<Offset<T>> *VectorCast(Vector<Offset<U>> *ptr) {
|
||||
static_assert(std::is_base_of<T, U>::value, "Unrelated types");
|
||||
return reinterpret_cast<Vector<Offset<T>> *>(ptr);
|
||||
}
|
||||
|
||||
template<typename T, typename U>
|
||||
const Vector<Offset<T>> *VectorCast(const Vector<Offset<U>> *ptr) {
|
||||
static_assert(std::is_base_of<T, U>::value, "Unrelated types");
|
||||
return reinterpret_cast<const Vector<Offset<T>> *>(ptr);
|
||||
}
|
||||
#endif
|
||||
|
||||
// Convenient helper function to get the length of any vector, regardless
|
||||
// of wether it is null or not (the field is not set).
|
||||
template<typename T> static inline size_t VectorLength(const Vector<T> *v) {
|
||||
|
|
Loading…
Reference in New Issue