Я создал список типов вариантов c шаблонов
template <typename... Types>
struct type_list
{
};
и некоторые функции модификаторов, такие как push_back
template <class TypeList, typename PushBack>
struct push_back
{
};
template <template<typename...> class TypeList, typename... Types, typename PushBack>
struct push_back< TypeList<Types...>, PushBack >
{
using type = TypeList<Types..., PushBack>;
};
template <class TypeList, typename PushBack>
using push_back_t = typename push_back<TypeList, PushBack>::type;
Теперь я хочу использовать type_list в рамках настраиваемого stati c библиотека отражения для хранения всей мета-структуры, содержащей информацию о переменных-членах (имя, размер, тип, адрес). Например:
#define DECLARE_VARIABLE_INFO(VariableName) \
using VariableName##_TypeInfo = VariableInfo<decltype(VariableName), VariableName##_Name, MemberAddress<&ClassType::VariableName>>; \
*** What to put here to reuse the existing type_list without redefining a new list ***
*** I could write using VariableName##_PushBack = push_back_t<MemberList, VariableName##_TypeInfo>; but MemberList will still be empty ***
struct Vec3
{
float x, y, z = 0.f
struct Vec3_Info // hold class meta info
{
using MemberList = meta_list::type_list<>;
DECLARE_VARIABLE_INFO(x); // x_PushBack is there but MemberList is empty
DECLARE_VARIABLE_INFO(y); // y_PushBack is there but it doesn't hold x meta info and MemberList is empty
DECLARE_VARIABLE_INFO(z); // z_PushBack is there but it doesn't hold x and y meta infos and MemberList is empty
};
};
Я не могу понять, как заполнить существующий type_list без переопределения новых типов. Можно ли это сделать?
Я использую не тот инструмент? Или я плохо использую правильный инструмент?
Прошу прощения, это, наверное, глупый вопрос, но я новичок в метапрограммировании шаблонов и функциональном программировании в целом.