Статическое отражение с ++ TS: будет ли он поддерживать назначение / вызов по имени?
Существует техническая спецификация C++ по статическому отражению (текущий проект PDF и страница cppreference ), которая может перейти на C++ 23 или более позднюю версию .
Возможно ли в текущем черновике (я понимаю, что синтаксис, возможно, еще не исправлен) получить доступ к полям структуры / вызвать функции-члены класса по имени?
Например
struct Test {
int x;
int y;
};
Test foo;
auto meta = reflexpr(foo); // access meta information about class
some_magic_setter<"x", meta>(foo, 5); // ???
Возможно ли это, и если да, то как?
1 ответ
get_pointer<X>
получает указатель на член,
get_name<X>
получает свое название. Добавьте несколько итераций по членам (также поставляются) и обработку несоответствия типов (что может быть сделано в C ++ 03 ), и bob - ваш дядя.
C++ предоставляет примитивы отражения во время компиляции; поэтому, насколько мне известно, вам придется написать код клея самостоятельно.
Я бы начал с функции, создающей кортеж пар (указатель-член имени), используя отражение. Это может быть чисто
constexpr
.
Затем другая функция, которая выполняет настройку на основе этой структуры, в которой происходит сбой во время выполнения.
Это позволит вам тестировать обе части по отдельности; только построение «словаря» требует рефлексии.