关于c++模板自身的重载.
风划雪月 2014-06-30 05:33:51 模板自身的重载,是我自己发明的词,举个列子说明问题吧
template<typename T> void foo(T &a,T &b) {...}
template<int a,int b> void foo( const char (&A)[a],const char( &B)[b]){...}
1、首先这个俩个模板名字都是foo,这也是我一直想叫他模板自身重载的原因
2、差别,第一个要求俩个参数的类型必须是一样的。第二个要求俩个参数必须是char 数组的引用,但是数组长度可以不一样,因为数组长度也用于区别类型。
这是时果用长度相同的 char数组调用foo,编译会提示有歧义。
我的疑问:
1,第一个调用只推断了T的类型
2、第二个调用推断了非类型模板参数a,和 b,
c++标准只规定了使用最特化的模板,对于不存在特化关系的同名模板,都认为是有歧义的吗?
c++ primer 5th上面没有详细的说明,而且举了个例子和我说的类似,只是调用时,使用了长度不同的数组。回避掉了这个问题。
或者有其他资料可参考吗?小弟孤陋寡闻了,望大神赐教。
我是个闭门造车的主,没多少分,大家见谅。