Próbuję uzyskać dostęp do statycznej funkcji członka zdefiniowanej w szablonie klasy. W TemplateTest.h pliku nagłówka I zdefiniowany szablon klasy podstawowej jak:Funkcja elementu statycznego wewnątrz specjalizacji szablonów klasy
#include<iostream>
template<class T, class U>
struct TemplateTest
{
public:
void static invoke();
/*{
std::cout << "Should not be called" << std::endl;
}*/
};
Następnie Plik źródłowy TemplateTester.cpp kładę specjalność:
#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
jawnie instancję klasy z tak łącznikowych ustąpieniu prawidłowo.
W driver.cpp Kierowca:
include "TemplateTest.h"
int main()
{
TemplateTest<int, bool>::invoke();
return 0;
}
Kiedy skompilować TemplateTest.cpp z g ++ generuje plik obiektowy poprawnie, ale gdy próbuję połączyć go z klasy sterownika daje mój błąd łącznik " undefined odwołanie do `TemplateTest :: invoke()"
Przeszedłem przez inne podobne posty, takie jak this one, ale nie próbuję uzyskać dostęp do szablonu funkcji.
Każda wskazówka jest bardzo cenna.
Przenieś implementację do pliku nagłówkowego. Implementacje szablonów muszą być widoczne dla wszystkich JT korzystających z nich. –