读书人

模板的疑义

发布时间: 2012-08-17 02:08:34 作者: rapoo

模板的疑问
模板是静态链编的, 这点和运行是识别的虚函数不同, 那在下面的程序遍不过去的原因又是为何

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);} 

读书人网 >C++

热点推荐