Реестр типов компиляции в C ++C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Реестр типов компиляции в C ++

Сообщение Anonymous »

Мне нужен способ настроить «реестр времени компиляции», который отображает зарегистрированные типы для увеличения INT идентификатора и обратно.#define component(T) /* ?? */
template using registry_t = /* ?? */;

component(some_type) {
// some_type gets mapped to ID 0
};

namespace my_namespace {
component(some_type) {
// my_namespace::some_type gets mapped to ID 1
};
}

static_assert(some_type::id() == 0, "First registered component gets ID 0");
static_assert(my_namespace::some_type::id() == 1, "Second should get ID 1");
static_assert(std::is_same_v, "Should match");
static_assert(std::is_same_v, "Should match");

Я использую контр -библиотеку Constexpr Falemagn для реализации картирования произвольных типов для увеличения идентификаторов. Он работает, назначая номер увеличения каждый раз, когда следующий метод счетчика вызывается с уникальным типом; например ,::
struct __context;
static constexpr fameta::counter component_counter;

struct struct1;
static_assert(component_counter.next() == 0, "Starts at 0");

struct helloworld;
static_assert(component_counter.next() == 1, "Increments to 1");

struct foobar;
static_assert(component_counter.next() == 2, "Increments to 2");
< /code>
Попытаемое решение 1-Метапреграммирование шаблона < /h1>
Нормальный способ, который я думаю, что можно было бы реализовать это через специализации шаблона: < /p>
< /p>


Подробнее здесь: https://stackoverflow.com/questions/797 ... istry-in-c
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»