Отладка метапрограмм

Там какой-либо путь состоит в том, чтобы проверить шаг за шагом, что продолжается в скажем, шаблоне? Я имею в виду, как это инстанцируют шаг за шагом и так далее?

В книге я упомянул здесь,

Я нашел (2 минуты назад) довольно интересный пример того, как двоичный файл мог быть реализован как метафункция.

template 
   struct binary
   {
       static unsigned const value
          = binary::value << 1   // prepend higher bits
            | N%10;                    // to lowest bit
   };

   template <>                           // specialization
   struct binary<0>                      // terminates recursion
   {
       static unsigned const value = 0;
   };

и я думаю, что могло быть довольно полезно смочь видеть шаг за шагом, что было сделано во время инстанцирования этого шаблона. Спасибо за Ваши ответы.

6
задан Community 23 May 2017 в 12:18
поделиться

1 ответ

Лучшее, что я видел на данный момент, это исследовательская работа по Templight, но я не знаю о какой-либо публичной реализации.

Вы можете значительно помочь себе, используя описательные статические (т.е. во время компиляции) утверждения - смотрите, например, Boosts static assert или MPLs assert. В некоторых случаях может помочь провоцирование ошибки компиляции (например, с помощью статических утверждений), чтобы получить от компилятора трассировку инстанцирования шаблона.
Также ничто не мешает выводить результаты метафункций во время выполнения для тестирования.

0
ответ дан 18 December 2019 в 04:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: