我不知道你口中的“实例化”是什么意思
我只说C++标准中的instantiation概念:
假如只有代码
template<typename T> void foo( T t )
{
}
template<> void foo<int>( int t )
{
}
的话,编译此代码,在obj文件中是找不到foo的任何实例的,即存在“生成 void foo<double>(double)、void foo<char*>(char*)、void foo<int>(int)……的规则”,但并不存在“void foo<double>(double)、void foo<char*>(char*)、void foo<int>(int)”
如果源代码写上
template void foo<double>(double)
template void foo<int>(int)
那么编译此代码后,在obj文件中就有了 template void foo<double>(double) 和 template void foo<int>(int)。
这就是所谓的 模板实例化。
传统的方法还有
int main( void )
{
void foo<double>(double);
foo( 1.2 ); // 这触发生成 void foo<double>(double)
foo( 1 ); // 这触发生成 void foo<int>(int)
}
我只说C++标准中的instantiation概念:
假如只有代码
template<typename T> void foo( T t )
{
}
template<> void foo<int>( int t )
{
}
的话,编译此代码,在obj文件中是找不到foo的任何实例的,即存在“生成 void foo<double>(double)、void foo<char*>(char*)、void foo<int>(int)……的规则”,但并不存在“void foo<double>(double)、void foo<char*>(char*)、void foo<int>(int)”
如果源代码写上
template void foo<double>(double)
template void foo<int>(int)
那么编译此代码后,在obj文件中就有了 template void foo<double>(double) 和 template void foo<int>(int)。
这就是所谓的 模板实例化。
传统的方法还有
int main( void )
{
void foo<double>(double);
foo( 1.2 ); // 这触发生成 void foo<double>(double)
foo( 1 ); // 这触发生成 void foo<int>(int)
}