Potrzebuję utworzyć statyczną funkcję generyczną (taką, która używa niezdefiniowanego typu klasy). Niestety mam dość małe doświadczenie w C++ i nie bardzo potrafię sobie z tym poradzić.
Wygląda to tak:
W pliku *.h
deklaruję funkcję:
template <class T> static T* LoadFromFile(std::string fileName, bool isDirected);
W pliku *.cpp
definiuję ją:
template <class T>
T* Container::LoadFromFile(std::string fileName, bool isDirected)
{
// tutaj generuję jakąś instancję T, przeprowadzam jakieś operacje na niej, po czym ją zwracam
}
I w funkcji main używam jej tak:
AdjacencyList* al = AdjacencyList::LoadFromFile<AdjacencyList>("dane_droga.txt", false);
Linker zwraca mi LNK2019 error (unresolved external symbol). Dotarłem już nawet do rozwiązania tego problemu: https://isocpp.org/wiki/faq/templates#separate-template-fn-defn-from-decl
W artykule proponują mi kilka rozwiązań, ja wolałbym uniknąć umieszczania deklaracji w headerfile więc, próbuję z opcją ostatnią:
template void foo<int>();
Próbuję na wszystkie sposoby dostosować to do mojego przypadku, niestety bez powodzenia:
template AdjacencyList* LoadFromFile<AdjacencyList>(std::string fileName, bool isDirected);
Function definition for 'LoadFromFile' not found
Ma ktoś pomysł jak to dostosować do mojej funkcji?