mirror of
https://github.com/ceres-solver/ceres-solver.git
synced 2026-08-30 00:50:37 +08:00
7743d2e73c
Since the number of manifolds used to initialize ProductManifold and their types are known at compile-time, it is possible to avoid storing pointers to the base class as required by a homogeneous, currently dynamically sized container. Instead, we can use std::tuple<> as a heterogenous container with the number of elements fixed at compile-time that allows us to store the concrete manifold realizations. The advantage of this approach is that we can bypass the vtable when iterating over each manifold within ProductManifold. The indirection is invoked only once while accessing the ProductManifoldImpl members. Additionally, potential dynamic memory allocations by a std::vector can be completely avoided. This makes the ProductManifold implementation more efficient both in memory and runtime. Change-Id: Ic71b0c175ab726f8992e9703f7666bca477baf19