Шаблоны должны использоваться в заголовках, потому что компилятор должен создавать экземпляры разных версий кода в зависимости от параметров, заданных / выведенных для параметров шаблона. Помните, что шаблон не представляет собой код напрямую, а шаблон для нескольких версий этого кода. Когда вы компилируете функцию non-template в файле .cpp
, вы компилируете конкретную функцию / класс. Это не относится к шаблонам, которые могут быть созданы с использованием разных типов, а именно, если при замене параметров шаблона конкретными типами необходимо исправить конкретный код.
Была функция с ключевым словом export
, которая была предназначенный для отдельной компиляции. Функция export
устарела в C++11
и, AFAIK, только один компилятор реализовал ее. Вы не должны использовать export
. Отдельная компиляция невозможна в C++
или C++11
, но, возможно, в C++17
, если понятия в нее входят, мы могли бы иметь некоторый способ отдельной компиляции.
Для отдельной компиляции, которая должна быть достигнута, разделить проверка шаблона тела должна быть возможна. Кажется, что решение возможно с концепциями. Взгляните на этот документ , недавно представленный на совещании по стандартам. Я думаю, что это не единственное требование, поскольку вам все равно необходимо создать код кода шаблона в коде пользователя.
Отдельная проблема компиляции для шаблонов, я думаю, это также проблема, возникающая при миграции на модули, которые в настоящее время работают.
Для этого нет необходимости в шестнадцатеричном режиме. Просто выполните глобальный поиск и замените ^ J ^ M на ^ J. У меня работает. :) Затем сохраните файл, уничтожьте буфер и снова посетите файл, чтобы в окне был показан новый файловый режим (Unix или DOS).
Ой. Этот ^ J ^ M нужно вводить как два буквальных символа.
Используйте cq
cj
, cq
cm
, а для строки замены используйте cq
cj
.
Если вы хотите удалить возврат каретки (обычно отображается как ^ M
) и оставить перевод строки. Вы можете просто посетить файл без какого-либо преобразования:
M-x find-file-literally /path/to/file
Потому что файл с возвратом каретки обычно отображается в режиме DOS (скрывая возврат каретки). В строке режима, вероятно, будет отображаться (DOS)
с левой стороны.
После того, как вы это сделаете, появится ^ M
, и вы сможете удалить их, как будто любой символ.
(в шестнадцатеричном режиме) I ' m не уверен, что можно удалять символы . Я всегда преобразовывал их в пробелы или другие символы, переходил в обычный текстовый редактор и удалял их там.
Предполагая, что вы хотите, чтобы закодированный файл DOS был изменен на кодировку UNIX, используйте Mx set-buffer-file-coding-system (Cx RET f), чтобы установить систему кодирования в "unix" и сохраните файл.
Также имеется инструмент командной строки под названием unix2dos / dos2unix , который существует специально для преобразования окончаний строк.
Вам не нужно использовать шестнадцатеричный режим. Вместо этого:
Дело в том, что даже если вы не знаете, как ввести то, что пытаетесь заменить, вы всегда можете выбрать / скопировать его.
Из http://www.xsteve.at/prg/emacs/xsteve-functions.el :
;02.02.2000
(defun xsteve-remove-control-M ()
"Remove ^M at end of line in the whole buffer."
(interactive)
(save-match-data
(save-excursion
(let ((remove-count 0))
(goto-char (point-min))
(while (re-search-forward (concat (char-to-string 13) "$") (point-max) t)
(setq remove-count (+ remove-count 1))
(replace-match "" nil nil))
(message (format "%d ^M removed from buffer." remove-count))))))
Добавьте это в свой .emacs
и запустите его через Mx xsteve-remove-control-M
или привяжите к более простому ключу. Он удалит ^ M
в любом режиме.