Преобразование указателя на элемент в индекс элемента с использованием Boost.PFR без создания объектаC++

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

Сообщение Anonymous »

Рассмотрим следующую структуру:

Код: Выделить всё

struct Particle
{
float scale;
float opacity;
float rotation;
};
Я хочу, чтобы скомпилировалось следующее:

Код: Выделить всё

static_assert(indexOf() == 0);
static_assert(indexOf() == 1);
static_assert(indexOf() == 2);
Мне удалось реализовать рабочую версию с помощью Boost.PFR:

Код: Выделить всё

template 
consteval int indexOf()
{
using ClassType = typename PMTraits::ClassType;
constexpr ClassType obj{};

std::size_t result = -1;

[&](std::index_sequence)
{
(...,
(
(    static_cast(&(boost::pfr::get(obj)))
== static_cast(&(obj.*PM))                  )
? (result = Is) : 0
)
);
}(std::make_index_sequence{});

return result;
}
Но меня не устраивает тот факт, что мне нужно создать объект типа ClassType, чтобы заставить работать obj.*PM.
Есть ли лучший способ сделать это, чтобы (1) не требовало создания объекта во время компиляции и/или (2) было бы более эффективно компилировать?

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

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

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

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

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

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