次のクラスとテンプレート関数があります。
template <size_t num>
class String{
public:
char charArray[num];
};
template <size_t num,typename T>
void getString(String<num> & string,T number){
cout <<string.charArray<<' '<<number<<'\n';
}
次に、次のように明示的なインスタンス化を実行して、そのインスタンス化をDLLにエクスポートしようとしましたが、リンカーによって未解決の外部シンボルのリンカーエラーが発生したため、最終的にインスタンス化されなかったことがわかりました。その関数をインポートして使用します(正確なリンカーエラー:"未解決の外部シンボル"__declspec(dllimport)void _ cdecl getString <5>(class String <5>&、unsigned char)( _imp _ ?? $ getString @ $ 04 @@ YAXAAV?$ String @ $ 04 @@ E @ Z) ")インスタンス化しようとした時点で" num "が指定されていなかったため、最初はString<num> & string
、ポインタとして実装されるため、次の構文になると考えていました。インスタンス化ですが、私は間違っていたようです。
template<size_t num>
__declspec(dllexport) void getString(String<num> & string,unsigned char number);
さて、私は地球上で見つかったすべての整数に対してインスタンス化を行うつもりはないので、インスタンス化を行うべきだとどのように提案しますか!!!。