[Bf-blender-cvs] [debf4b70db8] master: Cleanup: Avoid redundant template parameter in BLI serializing API

Julian Eisel noreply at git.blender.org
Wed Nov 3 17:29:45 CET 2021


Commit: debf4b70db81cff0dc22dc018c84cdcfd3eedbb7
Author: Julian Eisel
Date:   Wed Nov 3 17:20:20 2021 +0100
Branches: master
https://developer.blender.org/rBdebf4b70db81cff0dc22dc018c84cdcfd3eedbb7

Cleanup: Avoid redundant template parameter in BLI serializing API

The `ContainerValue` template can obtain the type of the contained value
via the given `Container` type, simply using `Container::value_type`.
Use this as the default way to determine the value type which simplifies
using the template. If necessary the value type can be passed explicitly
still.

===================================================================

M	source/blender/blenlib/BLI_serialize.hh

===================================================================

diff --git a/source/blender/blenlib/BLI_serialize.hh b/source/blender/blenlib/BLI_serialize.hh
index 7b8aa03b807..088243b3a30 100644
--- a/source/blender/blenlib/BLI_serialize.hh
+++ b/source/blender/blenlib/BLI_serialize.hh
@@ -103,11 +103,11 @@ using IntValue = PrimitiveValue<int64_t, eValueType::Int>;
 using DoubleValue = PrimitiveValue<double, eValueType::Double>;
 using BooleanValue = PrimitiveValue<bool, eValueType::Boolean>;
 
-template<typename Container, typename ContainerItem, eValueType V> class ContainerValue;
+template<typename Container, eValueType V, typename ContainerItem = typename Container::value_type>
+class ContainerValue;
 /* ArrayValue stores its items as shared pointer as it shares data with a lookup table that can
  * be created by calling `create_lookup`. */
-using ArrayValue =
-    ContainerValue<Vector<std::shared_ptr<Value>>, std::shared_ptr<Value>, eValueType::Array>;
+using ArrayValue = ContainerValue<Vector<std::shared_ptr<Value>>, eValueType::Array>;
 
 /**
  * Class containing a (de)serializable value.
@@ -234,11 +234,11 @@ template<
     /** The container type where the elements are stored in. */
     typename Container,
 
-    /** Type of the data inside the container. */
-    typename ContainerItem,
-
     /** ValueType representing the value (object/array). */
-    eValueType V>
+    eValueType V,
+
+    /** Type of the data inside the container. */
+    typename ContainerItem>
 class ContainerValue : public Value {
  public:
   using Items = Container;
@@ -275,8 +275,7 @@ using ObjectElementType = std::pair<std::string, std::shared_ptr<Value>>;
  * Object is a key-value container where the key must be a std::string.
  * Internally it is stored in a blender::Vector to ensure the order of keys.
  */
-class ObjectValue
-    : public ContainerValue<Vector<ObjectElementType>, ObjectElementType, eValueType::Object> {
+class ObjectValue : public ContainerValue<Vector<ObjectElementType>, eValueType::Object> {
  public:
   using LookupValue = std::shared_ptr<Value>;
   using Lookup = Map<std::string, LookupValue>;



More information about the Bf-blender-cvs mailing list