diff --git a/include/flatbuffers/flatbuffer_builder.h b/include/flatbuffers/flatbuffer_builder.h index 350fafc3c..9cc294d1e 100644 --- a/include/flatbuffers/flatbuffer_builder.h +++ b/include/flatbuffers/flatbuffer_builder.h @@ -18,6 +18,7 @@ #define FLATBUFFERS_FLATBUFFER_BUILDER_H_ #include +#include #include "flatbuffers/allocator.h" #include "flatbuffers/array.h" @@ -655,6 +656,16 @@ class FlatBufferBuilder { return CreateVector(array.data(), array.size()); } + /// @brief Serialize an initializer list into a FlatBuffer `vector`. + /// @tparam T The data type of the initializer list elements. + /// @param[in] v The value of the initializer list. + /// @return Returns a typed `Offset` into the serialized data indicating + /// where the vector is stored. + template + Offset> CreateVector(std::initializer_list v) { + return CreateVector(v.begin(), v.size()); + } + template Offset>> CreateVector(const Offset *v, size_t len) { StartVector(len, sizeof(Offset)); diff --git a/tests/test.cpp b/tests/test.cpp index aea3b4ba9..55639f32c 100644 --- a/tests/test.cpp +++ b/tests/test.cpp @@ -13,6 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +#include + #include #include @@ -86,8 +88,9 @@ flatbuffers::DetachedBuffer CreateFlatBufferTest(std::string &buffer) { auto name = builder.CreateString("MyMonster"); - unsigned char inv_data[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; - auto inventory = builder.CreateVector(inv_data, 10); + // Use the initializer_list specialization of CreateVector. + auto inventory = + builder.CreateVector({ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }); // Alternatively, create the vector first, and fill in data later: // unsigned char *inv_buf = nullptr;