Шаблон C ++ Quine - PullRequest
       19

Шаблон C ++ Quine

4 голосов
/ 15 февраля 2010

Известно, что шаблоны C ++ завершены. Таким образом, должна быть возможность вывести quine, который, по сути, отображается во время компиляции. Кто-нибудь знает, была ли написана такая лебеда или где я мог ее найти?

Ответы [ 2 ]

5 голосов
/ 15 февраля 2010

Шаблоны могут выполнять любые вычисления на целочисленных элементах данных, правда. Но они не так хороши в I / O.

Какую форму должен принять ответ? Шаблон, который генерирует функцию, которая при выполнении выводит источник quine? Это не совсем время компиляции. Шаблон, который генерирует список символов времени компиляции (сотни или тысячи классов), составляющих источник quine? Может быть, это и лучше, но вам все равно нужно запустить программу для ее вывода.

Кроме того, шаблоны очень многословны, и, хотя они полностью завершены, это только в пределах небольшого ограничения памяти гарантировано , рекомендованного стандартом. Например, вы можете ожидать только столько рекурсии, за пределами которой программа сильно зависит от компилятора. Может быть невозможно написать «значимо вычисляемую» квину, которая хранит себя в переносимой форме.

3 голосов
/ 15 февраля 2010

Шаблоны имеют только одну форму прямого вывода - сообщения об ошибках / предупреждения. Поскольку нет никакой гарантии относительно формы, которую они принимают, вы не можете написать что-то, что определенно будет квин, и то, что вы напишите, почти наверняка будет иметь другой текст с вкраплениями исходного кода.

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

...