From f41e3f31ae1dbd1c1ea9d4c0b5428286f081250c Mon Sep 17 00:00:00 2001
From: Christoph Lehmann <christoph.lehmann@ufz.de>
Date: Mon, 17 Oct 2022 07:22:52 +0200
Subject: [PATCH] [PL] Struct holding reflection meta data

---
 ProcessLib/Reflection/ReflectionData.h | 44 ++++++++++++++++++++++++++
 1 file changed, 44 insertions(+)
 create mode 100644 ProcessLib/Reflection/ReflectionData.h

diff --git a/ProcessLib/Reflection/ReflectionData.h b/ProcessLib/Reflection/ReflectionData.h
new file mode 100644
index 00000000000..eecdc2b39d5
--- /dev/null
+++ b/ProcessLib/Reflection/ReflectionData.h
@@ -0,0 +1,44 @@
+/**
+ * \file
+ * \copyright
+ * Copyright (c) 2012-2022, OpenGeoSys Community (http://www.opengeosys.org)
+ *            Distributed under a Modified BSD License.
+ *              See accompanying file LICENSE.txt or
+ *              http://www.opengeosys.org/project/license
+ *
+ */
+
+#pragma once
+
+#include <string>
+#include <tuple>
+
+namespace ProcessLib::Reflection
+{
+template <typename Class, typename Member>
+struct ReflectionData
+{
+    ReflectionData(std::string name, Member Class::*field)
+        : name(std::move(name)), field(field)
+    {
+    }
+
+    explicit ReflectionData(Member Class::*field) : field(field) {}
+
+    std::string name;
+    Member Class::*field;
+};
+
+template <typename Class, typename Member>
+std::tuple<ReflectionData<Class, Member>> reflectWithName(
+    std::string const& name, Member Class::*field)
+{
+    return {{name, field}};
+}
+
+template <typename Class, typename... Members>
+auto reflectWithoutName(Members Class::*... members)
+{
+    return std::tuple{ReflectionData<Class, Members>{"", members}...};
+}
+}  // namespace ProcessLib::Reflection
-- 
GitLab