@
abscon 你这个解读呢,在现在这个时间点没错。我们还可以再高大上一点:C++的泛型是一种metaprogramming机制。
可是我们看问题还要有历史的角度。Bjarne Stroustrup在程序语言理论方面并没有很深的涉猎,C++ templates并不是在理论指导下设计,而是逐步演化来的。Templates最初要解决什么问题,看当初引入templates后实现的第一批库即可。
Templates带来的可能性,是使用过程中逐步发现,而不是有意识设计的结果。(尽管Stroustrup在D&E中把这部分归功于他的设计哲学。注意,仅仅是设计哲学。Stroustrup在设计那些使STL成为可能的语言特性时,本来还是针对homogeneous container的具体问题,而并未有意识地支持metaprogramming。)
正因为templates这种无意识的特点,用它作metaprogramming时才有各种语法复杂和scalability问题。我们根本上是在用一把由锤子演化来的菜刀。
不过,即使Java generics这种有意设计的结果也相当复杂,Go暂不采用也很正常。