Инструмент препроцессора шаблона C ++ - PullRequest
5 голосов
/ 16 июля 2009

Существует ли компилятор или автономный препроцессор, который принимает файлы C ++ и выполняет этап расширения шаблона, генерируя новый код C ++ с расширенными экземплярами шаблона?

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

Это намного сложнее, чем этап макрообработки, поскольку для понимания контекста он, вероятно, потребует разбора и токенизации кода.

Я надеюсь использовать такой инструмент при написании кода OpenCL. OpenCL - это C ++, но не поддерживает шаблоны. Я надеюсь, что смогу написать шаблоны, даже простые, например, с целочисленными или bool-аргументами, и иметь какой-то инструмент для предварительного анализа файла, поиска и использования шаблонов, расширения вызовов и предоставления мне нового кода C ++, который OpenCL компилятор может понять.

Даже очень ограниченный инструмент может быть полезен, он не должен поддерживать каждую причуду шаблона или даже поддерживать несколько модулей или что-либо еще.

Альтернатива: #define макросы везде ... страшнее, небезопасно, менее эффективно и менее универсально.

Ответы [ 3 ]

9 голосов
/ 16 июля 2009

Comeau C ++ может "скомпилировать" C ++ в C. Это может показаться близким к вашей цели, поскольку OpenCL не поддерживает C ++ & ndash; это намного ближе к C.

0 голосов
/ 16 июля 2009

Почему бы не взглянуть на компилятор GCC C ++? Я уверен, что приложив немного усилий, вы сможете перехватить процесс компиляции и просто сбросить «расширенные» шаблоны в свои собственные файлы кода. Однако, написать это самостоятельно было бы довольно просто, я бы подумал. Я не понимаю, зачем вам нужен «полный» компилятор, чтобы вообще этого добиться. Исходя из моего опыта, шаблоны знают о контексте только в тех случаях, когда компилятор хочет выдать вам ошибку. Если вы предварительно проверили код шаблона с помощью реального компилятора, а затем запустили его с помощью инструмента «поиск / замена», вы получите правильный код; Я уверен.

0 голосов
/ 16 июля 2009

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

...