Шаблоны должны использоваться в заголовках, потому что компилятор должен создавать экземпляры разных версий кода в зависимости от параметров, заданных / выведенных для параметров шаблона. Помните, что шаблон не представляет собой код напрямую, а шаблон для нескольких версий этого кода. Когда вы компилируете функцию non-template в файле .cpp
, вы компилируете конкретную функцию / класс. Это не относится к шаблонам, которые могут быть созданы с использованием разных типов, а именно, если при замене параметров шаблона конкретными типами необходимо исправить конкретный код.
Была функция с ключевым словом export
, которая была предназначенный для отдельной компиляции. Функция export
устарела в C++11
и, AFAIK, только один компилятор реализовал ее. Вы не должны использовать export
. Отдельная компиляция невозможна в C++
или C++11
, но, возможно, в C++17
, если понятия в нее входят, мы могли бы иметь некоторый способ отдельной компиляции.
Для отдельной компиляции, которая должна быть достигнута, разделить проверка шаблона тела должна быть возможна. Кажется, что решение возможно с концепциями. Взгляните на этот документ , недавно представленный на совещании по стандартам. Я думаю, что это не единственное требование, поскольку вам все равно необходимо создать код кода шаблона в коде пользователя.
Отдельная проблема компиляции для шаблонов, я думаю, это также проблема, возникающая при миграции на модули, которые в настоящее время работают.
Похоже на ту же проблему, что и: https://railsblogs.rohityadav.in/2018/01/awss3errorsaccessdenied-access-denied.html
Если вы получили это ошибка при попытке загрузки на S3, вам необходимо назначить этому пользователю IAM политику «AmazonS3FullAccess».
blockquote>Или это может быть проблема с настройкой heroku:
AWS :: S3 :: Errors :: AccessDenied. Невозможно сохранить в S3 с Ruby on Rails
Вам нужно установить свои учетные данные AWS в качестве переменных конфигурации в heroku (в основном, переменных среды). Вы можете проверить, установлены ли они с помощью настройки heroku; если они не установлены, вы можете добавить их с помощью конфигурации heroku: set S3_BUCKET_NAME = что-то AWS_ACCESS_KEY_ID = что угодно AWS_SECRET_ACCESS_KEY = something_secret. Больше информации с помощью настройки heroku --help
blockquote>