私のコードには次のようなものがあります:
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()
。