рекомендации по реализации шаблона класса C ++ в отдельном файле и поддержка IDE - PullRequest
0 голосов
/ 22 февраля 2019

Реализация класса шаблона должна быть доступна, когда шаблон создается в вызывающем коде.Следовательно, простое решение - поместить определение и реализацию класса в один заголовочный файл.Конечно, есть и другие решения.Решения, которые я мог найти с Google, в основном уже суммированы в http://blog.ethanlim.net/2014/07/separate-c-template-headers-h-and.html, который предлагает:

  • Вся реализация в заголовочный файл
  • Явное создание шаблона в реализации (* .cpp)

Вариант первого, который я видел, используют другие люди, и я использовал себя, чтобы создать файл заголовка для реализации myTemplateClass_impl.h, который включен из другого заголовка myTemplateClass.часЯ всегда думал, что это рекомендуемый способ сделать это, но при поиске в Google я был удивлен, что не смог найти нигде описанную эту технику.Теперь у меня есть одна проблема с этим методом: он нарушает vscode intellisense (или другую поддержку IDE C ++), потому что myTemplateClass_impl.h не является самодостаточным.

Теперь есть способ сделать его дружественным по отношению к IDE, но этонемного свернутый:

myTemplateClass.h

#ifndef MYTMPCL_H
#define MYTMPCL_H
namespace tmpcl {
  template <typename T> class TmpCL
  {
    ...
  } 
} // namespace tmpcl
#include "myTemplateClass_impl.h"
#endif // MYTMPCL_H

myTemplateClass_impl.h

#ifndef MYTMPCL_IMPL_H
#define MYTMPCL_IMPL_H
#include "myTemplateClass.h"
namespace tmpcl {
    // implementation
  template <typename T> TmpCL::...

} // namespace tmpcl

#endif // MYTMPCL_IMPL_H

Теперь не имеет значения, какой из двух файлов включен.Они оба расширяются до одного и того же кода, и vscode intellisense рад.Этот дизайн хорош?

Спасибо.

Также я был удивлен, что не смог найти рекомендации о том, как это сделать, в основных рекомендациях C ++ на https://isocpp.org/

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