• David P. Sicilia's avatar
    [C++17] Add Traits class for Tables and Factory function within it. (#5678) · a5d9d0f7
    David P. Sicilia authored
    * Include flattests_cpp17 in unit tests when C++17 build is enabled.
    
    * [C++17] Generate generic table factory function.
    
    1. For each table, generate a convenient free-standing factory
       function that allows creating the table in a generic way by
       specifying only the type.  This is the first change in a series
       of changes to make Flatbuffers generated C++ code more friendly
       to code bases that make use of C++ template metaprogramming
       techniques to manage the serialization process.  Example:
    
         Before :(
    
           // The name of the Flatbuffers type (and namespace) must
           // be hard-coded when writing the factory function.
           auto monster = MyGame::Example::CreateMonster(fbb, ...);
    
         After  :)
    
           using type_to_create = MyGame::Example::Monster;
           // No namespace needed on CreateByTagType.
           auto monster = CreateByTagType((type_to_create*)nullptr,
                                          fbb, ...);
    
       This feature requires building with C++14 or greater, and thus
       it is guarded behind --cpp-std >= c++17 in the flatbuffers C++
       generator.
    
    2. Fix a CMake bug to include C++17 unit tests in test suite.
    
    * [C++17] Replace standalone variadic factory function with type_traits.
    
    Add a `type_traits` to each table class.  This `type_traits` can be
    populated with various compile-time info about the table.  Initially,
    we have the Create* function and type, but is extensible in the future.
    
    * Remove empty line and fix stale comments.
    
    * Rename type_traits to Traits and move fwd declaration.
    
    * Fix parameter evaluation order issue and use lambda for scope.
    a5d9d0f7
Name
Last commit
Last update
.appveyor Loading commit data...
.bazelci Loading commit data...
.github Loading commit data...
.travis Loading commit data...
CMake Loading commit data...
android Loading commit data...
conan Loading commit data...
dart Loading commit data...
docs Loading commit data...
go Loading commit data...
grpc Loading commit data...
include/flatbuffers Loading commit data...
java/com/google/flatbuffers Loading commit data...
js Loading commit data...
lobster Loading commit data...
lua Loading commit data...
net/FlatBuffers Loading commit data...
php Loading commit data...
python Loading commit data...
reflection Loading commit data...
rust/flatbuffers Loading commit data...
samples Loading commit data...
snap Loading commit data...
src Loading commit data...
tests Loading commit data...
.clang-format Loading commit data...
.editorconfig Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
.travis.yml Loading commit data...
BUILD Loading commit data...
CMakeLists.txt Loading commit data...
CONTRIBUTING.md Loading commit data...
LICENSE.txt Loading commit data...
WORKSPACE Loading commit data...
appveyor.yml Loading commit data...
build_defs.bzl Loading commit data...
composer.json Loading commit data...
conanfile.py Loading commit data...
package.json Loading commit data...
pom.xml Loading commit data...
readme.md Loading commit data...