Отделение определения класса шаблона от объявления - явное создание экземпляра - PullRequest
1 голос
/ 14 июля 2020

У меня есть .h и. cpp файл

Foo.h

template<typename T>
class Foo {
public:
  void g();
  void h();
};

Foo. cpp

#include <iostream>
#include "Foo.h"
template<typename T>
void Foo<T>::g()
{
  std::cout << "Foo<T>::g()\n";
}
template<typename T>
void Foo<T>::h()
{
  std::cout << "Foo<T>::h()\n";
}

Два вышеуказанных файла находятся в каталоге abc / def, и у меня есть реализация в другом cpp файле

Foo-impl. cpp

#include <../../Foo.cpp>
template class Foo<int>;

Этот Foo-impl.cpp находится в abc / ghi / jkl.

Но когда я использую #include <abc/def/Foo.cpp, я получаю сообщение об ошибке, что файл не существует. Но когда я использую #include <abc/def/Foo.h>, я не получаю, что файл не содержит ошибки (файл определяется компилятором), но я получаю ошибку компоновщика.

Я использую реализацию согласно ссылка

Почему работает с <../../Foo.cpp> и почему не с <abc/def/Foo.cpp. Как заставить его работать?

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