考虑以下文件:
Foo.H
template <typename T>
struct Foo
{
int foo();
};
template <typename T>
int Foo<T>::foo()
{
return 6;
}
Foo.C
#include "Foo.H"
template <>
int Foo<int>::foo()
{
return 7;
}
主程序
#include <iostream>
#include "Foo.H"
using namespace std;
int main()
{
Foo<int> f;
cout << f.foo() << endl;
return 0;
}
当我编译并运行时,会打印 7。这里发生了什么?模板何时实例化?如果编译器这样做了,编译器怎么知道不实例化自己的 Foo 版本?