Non riesco ad accedere alla funzione membro statica definita all'interno del modello di classe. Nel file di intestazione TemplateTest.h ho definito il modello di classe primaria come:all'interno della specializzazione del modello di classe
#include<iostream>
template<class T, class U>
struct TemplateTest
{
public:
void static invoke();
/*{
std::cout << "Should not be called" << std::endl;
}*/
};
Poi origine del file TemplateTester.cpp ho messo una specializzazione:
#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
ho istanziate esplicitamente la classe con risolve così linker correttamente.
Nella driver.cpp conducente:
include "TemplateTest.h"
int main()
{
TemplateTest<int, bool>::invoke();
return 0;
}
Quando compilo il TemplateTest.cpp con g ++ genera il file oggetto correttamente, ma quando provo a collegarlo alla classe conducente si dà il mio errore di linker " riferimento non definito a `TemplateTest :: invoke()"
Sono passato attraverso altri post correlati come this one ma non sto tentando di accedere a un modello di funzione.
Qualsiasi indizio è molto apprezzato.
Spostare l'implementazione nel file di intestazione. le implementazioni del modello devono essere visibili a tutte le TU che le utilizzano. –