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