Статическое отражение с ++ 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.

Затем другая функция, которая выполняет настройку на основе этой структуры, в которой происходит сбой во время выполнения.

Это позволит вам тестировать обе части по отдельности; только построение «словаря» требует рефлексии.

Другие вопросы по тегам