У меня есть что-то вроде этого в моем коде:
template <typename T>
struct A
{
void Print();
};
template <>
struct A<char*>
{
void Print() { printf("Char*!\n"); }
};
template <typename T>
void DoSomething(T& lol)
{
A<T> a;
a.Print();
}
int main()
{
char a[5];
DoSomething(a);
}
И это приводит к следующей ошибке компоновщика:
error LNK2019: unresolved external symbol "public: void __thiscall A<char [5]>::Print(void)" (?Print@?$A@$$BY04D@@QAEXXZ) referenced in function "void __cdecl DoSomething<char [5]>(char const (&)[5])" (??$DoSomething@$$BY04D@@YAXAAY04$$CBD@Z)
Для какого типа я должен специализировать шаблон A, чтобы я мог использовать его с массивом символов? Я пробовал const char*
и другие комбинации const, char, * и &, и ничего не работает.
Обратите внимание, что я не могу изменить функцию DoSomething
.
Также, если возможно, я бы хотел, чтобы компилятор автоматически выводил (или преобразовывал) тип шаблона, не указывая его при вызове DoSomething<smth>()
в main()
.