c++ primer中关于函数模板的描述。
函数模板实参推演的通用算法:
1)依次检查每个函数实参, 确定在每个函数实参的类型中出现的模板参数;
2)找到模板参数, 通过检查函数实参的类型, 推演相应的模板实参;
3)函数参数类型和函数实参类型可以转换: -左值转换 -限定修饰符转换 – 派生类到基类的转换;
4)假如在多个函数参数中找到同一个模板参数, 从每个相应函数实参推演出的模板参数必须相同(模板参数会被绑定在第一个类型上)
能不能结合一个例子说明一下第一句是什么意思?
函数模板实参推演的通用算法:
1)依次检查每个函数实参, 确定在每个函数实参的类型中出现的模板参数;
2)找到模板参数, 通过检查函数实参的类型, 推演相应的模板实参;
3)函数参数类型和函数实参类型可以转换: -左值转换 -限定修饰符转换 – 派生类到基类的转换;
4)假如在多个函数参数中找到同一个模板参数, 从每个相应函数实参推演出的模板参数必须相同(模板参数会被绑定在第一个类型上)
能不能结合一个例子说明一下第一句是什么意思?
解决方案
2
参考g++源代码相关片断。
2
有代码的结合代码应该比较好理解
14
template <class T1, class T2, int Count> void foo(T1(&a)[Count], T2(&b)[Count + 1]) { } int main() { int a[10]; float b[11]; foo(a, b); }
a涉及模板参数T1和Count,b涉及T2和Count。然后能确定T1是int,T2是float,Count是10
2
这句话简直是不知所云,应该是翻译的问题,题主可以看一下原版