Вложенные структуры Boost Fusion

Можно ли определить (или адаптировать) структуру Boost Fusion, содержащую элементы Boost Fusion, в одном операторе?

Например, как я могу адаптировать или определить что-то эквивалентное этому:

struct Outer
{
   int i;
   float j;
   struct Nested
   { 
      int a;
   } nested;
};

Где и Outer, и Outer::Nested являются отражаемыми типами.

Определение всех внутренних типов в порядке наизнанку очень запутанно и выставляет внутренние типы наружу.


person Adi Shavit    schedule 31.08.2016    source источник
comment
пример того, что вы хотите? (даже если псевдокод?)   -  person Richard Hodges    schedule 31.08.2016
comment
Вас может заинтересовать это? (Если это так, я мог бы написать ответ завтра). Я знаю, что было бы лучше использовать BOOST_FUSION_DEFINE_STRUCT, но я не вижу способа добиться желаемого результата.   -  person llonesmiz    schedule 03.09.2016
comment
@jv_: это было бы немного лучше, чем чистое решение для слияния, но я бы действительно предпочел одну точку определения, как с BOOST_FUSION_DEFINE_STRUCT. Написание вашего предложения в качестве ответа может помочь и будущим плакатам.   -  person Adi Shavit    schedule 03.09.2016


Ответы (1)


Вы должны иметь возможность «определить» внутреннюю структуру, используя ее полное имя:

BOOST_FUSION_ADAPT_STRUCT(
  Outer::Nested,
  a
)

BOOST_FUSION_ADAPT_STRUCT(
  Outer,
  i,
  j,
  nested
)
person xtofl    schedule 31.08.2016
comment
Итак, это адаптация структуры наизнанку, или, точнее, адаптация внутреннего класса отдельно от внешнего класса. Есть ли способ сделать это с помощью BOOST_FUSION_DEFINE_STRUCT и в одном определении? - person Adi Shavit; 31.08.2016
comment
Вот что вы имеете в виду :) - person xtofl; 31.08.2016
comment
Что ж, это обеспечивает правильные типы, но это не один оператор, синтаксически похожий на определение структуры. - person Adi Shavit; 31.08.2016
comment
обратите внимание, что для соответствия коду вопроса одно из полей в этом ответе должно быть j вместо f (не удалось отредактировать сообщение, потому что это слишком короткая разница) - person Yoav Feuerstein; 21.11.2017