Есть ли какие-либо проблемы, которые могут сделать систему генерации кода MS T4 Template непригодной для генерации кода C++?





Он может генерировать любой текст, который вы хотите, включая код C++.
Ваши шаблоны создаются с использованием C# или VB, но я не думаю, что это имеет какое-либо отношение к выводу.
@mackenir, я не думаю, что это вообще глупый вопрос ... есть некоторые синтаксисы, которые хорошо работают с разными структурами вывода, например, Razor подходит для HTML
Немного длинный ответ, но я думаю, что некоторым это может показаться интересным
Я бы сказал, что T4 отлично подходит для создания C++ с помощью
Кто-то может возразить, что в C++ уже есть инструменты для метапрограммирования, например:
Препроцессор
Используя препроцессор и макросы более высокого порядка, вы можете добиться того же, что и с T4, но я говорю, что у T4 есть довольно убедительные преимущества:
Частичная специализация шаблона
Мне нравятся уловки частичной специализации шаблонов, но по опыту я говорю, что не всем нравится их поддерживать.
Я всегда стремился уменьшить избыточность кода, чтобы повысить ремонтопригодность. Кроме того, я предпочитаю ошибки времени компиляции ошибкам времени выполнения, когда это возможно. Итак, прочитав Modern C++ Андрея Александреску, я подумал, что нашел отвечать.
Я написал компонент, вдохновленный этой книгой, который отлично сработал, а затем отправился в отпуск. Когда я вернулся, команда выбросила компонент и переписала свой, используя традиционные методы. Он содержал больше кода, был более глючным и не работал, однако они не могли понять, как добавить функциональность к компоненту, который я написал, и решили, что они должны это сделать. Ничего не спасти. Это тоже были умные ребята.
Были ли они в этом неправы? По ремонтопригодности я бы сказал, что сделали правильный выбор, хотя меня это огорчает.
Я хочу сказать, что у T4 есть некоторые преимущества перед трюками частичной специализации шаблонов:
Конечно, в C++ MetaProgramming - это комбинация PreProcessor и частичной специализации шаблона.
Недостатки
Конечно, у Т4 есть недостатки;
Подведение итогов
В общем, я потерял интерес к продвинутому метапрограммированию на C++, используя причудливые трюки с PreProcessor или системой типов (хотя я использую их для более простых задач), и в наши дни полагаюсь на T4.
Если кого-то интересует пример того, как это сделать на C++, вы можете проверить Интерактивная графика. Это библиотека для C#, VB, PowerShell и SmallBasic для создания простой графики. Там я использую T4 для генерации всех API и шаблонного кода для передачи сообщений между .NET и C++ (я не использую C++ / CLI, если могу этого избежать. all) из модели, описывающей API. Затем добавить новый метод так же просто, как расширить модель и восстановить все файлы шаблонов, затем я реализую абстрактный метод на C++ и делаю забавные вещи.
Спасибо - пример генерации C++ с использованием T4 в значительной степени отвечает на мой вопрос Да :).
Вы можете создавать шаблоны T4, просто установив их SingleFileTransformation или используя командную строку, см .: msdn.microsoft.com/en-us/library/bb126245.aspx
Да уж. Думаю, глупый вопрос. Хотя я видел, что вы можете указать, что языком шаблонов является VB или C#. Предположительно это относится к автоматической компиляции вывода шаблона?