类模板为什么要特化

时间:2022-05-25 20:51:12
现在正在看C++ templates,看到类模板特化这一节,有点疑惑。比如有如下一个类模板

template<typename T>
class className{
...
};

那么就可以按如下形式是以它:className<int> a;
既然已经可以用了,这跟先将模板特化再使用有什么区别呢?

9 个解决方案

#1


比如T是int和float的时候你希望用不同的方法处理。比如你想用printf打印T x,那么如果T是int,就应该是printf("%d", x),如果T是float就应该是printf("%f", x)

#2


换一本基础点的书,看懂了再来啃这本搞脑筋的书吧。

#3


某种类型需要特别处理,函数模板提供一个统一的入口,酱紫不是灰常好吗

#4


引用 2 楼 taodm 的回复:
换一本基础点的书,看懂了再来啃这本搞脑筋的书吧。

讲模板的也就那么几本书,哪本基础?

#5


除了《模板元编程》,其它哪本都比这个基础。
如果看不懂《stl源码剖析》就别浪费生命强看这一本。

#6


另外,这本书看懂了也是浪费生命。

#7


首先就是不可能写出对所有实例化的类型都合适的模版,某些情况下通用的模块对有些类型可能完全是错误的;基于上面的原因所以会时常需要进行模块特化操作。

template <typename T>
int compare(const T & x, const T & y)
{
    if (x < y) return -1;
    if (y < x) return 1;
    return 0;
}

例如这个例子,对于C字符串,比较的结果就完全是错误的

#8


这样可以提高效率

#9


大家都有提问的权利,也有自主学习的权利。帮顶

#1


比如T是int和float的时候你希望用不同的方法处理。比如你想用printf打印T x,那么如果T是int,就应该是printf("%d", x),如果T是float就应该是printf("%f", x)

#2


换一本基础点的书,看懂了再来啃这本搞脑筋的书吧。

#3


某种类型需要特别处理,函数模板提供一个统一的入口,酱紫不是灰常好吗

#4


引用 2 楼 taodm 的回复:
换一本基础点的书,看懂了再来啃这本搞脑筋的书吧。

讲模板的也就那么几本书,哪本基础?

#5


除了《模板元编程》,其它哪本都比这个基础。
如果看不懂《stl源码剖析》就别浪费生命强看这一本。

#6


另外,这本书看懂了也是浪费生命。

#7


首先就是不可能写出对所有实例化的类型都合适的模版,某些情况下通用的模块对有些类型可能完全是错误的;基于上面的原因所以会时常需要进行模块特化操作。

template <typename T>
int compare(const T & x, const T & y)
{
    if (x < y) return -1;
    if (y < x) return 1;
    return 0;
}

例如这个例子,对于C字符串,比较的结果就完全是错误的

#8


这样可以提高效率

#9


大家都有提问的权利,也有自主学习的权利。帮顶