Я борюсь за доступ к статической функции-члену, определенной внутри шаблона класса. В файле заголовка TemplateTest.h Я определил шаблон основной класс как:static member function внутри класса шаблон специализация
#include<iostream>
template<class T, class U>
struct TemplateTest
{
public:
void static invoke();
/*{
std::cout << "Should not be called" << std::endl;
}*/
};
Затем Source File TemplateTester.cpp я ставлю специализацию:
#include "TemplateTest.h"
template<>
struct TemplateTest<int, bool>
{
static void invoke()
{
std::cout << "invoke<int, bool>" << std::endl;
}
};
template struct TemplateTest<int, bool>; //instantiate to resolve linker issue
я явно инстанцированный класс с таким компоновщика решает правильно.
В driver.cpp драйвера:
include "TemplateTest.h"
int main()
{
TemplateTest<int, bool>::invoke();
return 0;
}
Когда я скомпилировать TemplateTest.cpp с г ++ он генерирует объектный файл правильно, но когда я пытаюсь связать его с классом драйвера он дает свою ошибку компоновщика " undefined ссылка на «TemplateTest :: invoke()»
Я прошел через другие связанные публикации, такие как this one, но я не пытаюсь получить доступ к шаблону функции.
Любой ключ приветствуется.
Переместить реализацию в файл заголовка. реализация шаблона должна быть видимой для всех TU, использующих их. –