У меня есть несколько дочерних классов, у всех из которых есть статическое поле type_id
. То, что я пытаюсь сделать, - это сохранить список типов (который, исходя из поиска, я знаю, что это деликатная тема), а затем получить доступ к type_id
типов в моем списке типов. Вот пример
// Example program
#include <iostream>
#include <tuple>
struct base_type
{
static const uint64_t type_id = 0;
};
struct A : public base_type
{
static const uint64_t type_id = 1;
};
struct B : public base_type
{
static const uint64_t type_id = 2;
};
struct C : public base_type
{
static const uint64_t type_id = 3;
};
template <class... Args>
struct type_list
{
template <std::size_t N>
using type = typename std::tuple_element<N, std::tuple<Args...>>::type;
};
int main()
{
using my_types = type_list<base_type, A, B, C>;
std::cout << my_types::type<1>.type_id << std::endl;
}
А потом, надеюсь, это распечатает 1. Однако, если вы попытаетесь скомпилировать это, это не сработает. Есть ли способ добиться чего-то подобного?
Редактировать: решение было настолько простым, что мне стыдно. Просто нужно my_types::type<1>::type_id
вместо my_types::type<1>.type_id