模板的疑问
模板是静态链编的, 这点和运行是识别的虚函数不同, 那在下面的程序遍不过去的原因又是为何
- C/C++ code
template <typename T>void fun(T a){ int a1; string a2; if ( a1 == a ) cout << "A1"; else if ( a2 == a ) cout << "A2";}int main(){ int a1 = 3; string a2 = "SF"; fun(a1); fun(a2);}如果以人的思想看, 是能区分出来的, 那这个问题是编译器嫌麻烦还是另有深意.
我知道把这个模板偏特化一下, 偏出来2个模板就可以编译了,但难度这个技术是为了掩饰模板的缺点而诞生的?
[解决办法]
fun参数是类型T,除非T能同时和int,string 做operator ==
[解决办法]
编译器不能和人脑相提并论的。电脑擅长的是重复繁杂的琐事,电脑只能够按照一定的规则来做,所以编译器不能够按照人的想法来,只有规定好规则后,它去执行即可。
[解决办法]
- C/C++ code
template <typename T>void fun(T v);template <>void fun(int v){ std::cout << "int" << << std::endl;}template <>void fun(std::string v){ std::cout << "std::string" << << std::endl;}int main(){ int a1 = 3; string a2 = "SF"; fun(a1); fun(a2);}