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

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

Сообщение Anonymous »

Я пытаюсь создать библиотеку-компоненты сущностей в C ++, которая позволяет спецификации как статически объявленных (или «встроенных»), так и компонентов времени выполнения. Первый будет иметь свои соответствующие таблицы в памяти, предварительно распределенные компилятором, в то время как последний вызовет A API C под капюшоном для регистрации компонентов во время выполнения и предназначен для использования разработчиками плагина или мода. Таким образом, чтобы библиотека ECS статически генерировала начальный статически выделенный буфер для хранения всех таблиц компонентов при составлении, мне нужно иметь возможность зацикливаться на всех компонентах во время компиляции. Каждый компонент должен быть объявлен с использованием компонента () «Ключевое слово» ( кашель макрос), как таковая:
component(Transform2D) {
mat3 transform {};
};

component(Collide2D) {
// ...
};

namespace mynamespace {
// the macro SHOULD be scope-agnostic for convenience
component(mycomponent) {
// ...
};
}

Я уже включил контр-библиотеку Contexpr Falemagn для реализации картирования произвольных типов для увеличения идентификаторов, но у меня возникают проблемы с реализацией обратного-отображение произвольных идентификаторов (например, int s). «Реестр», который отображает int s произвольных типах, но тот, который может соответствовать определению макроса.// Type registry starts at zero

struct some_type {
// ...
};
REGISTER(some_type); // some_type gets mapped to int 0

namespace my_namespace {
struct some_type {
// ...
};
REGISTER(some_type); // my_namespace::some_type gets mapped to int 1
}

static_assert(std::is_same_v
Нормальный способ, который я думаю, что можно было бы реализовать это через специализации шаблона: < /p>
< /p>


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

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

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

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

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

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