函数重载和模板扣除优先级

函数重载和模板扣除优先级

本文介绍了函数重载和模板扣除优先级的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

请考虑以下函数声明:

template<typename T> f(const T& x); // Version 1
template<typename T1, typename T2> f(const MyClass<T1, T2>& x); // Version 2

如果我调用 f 使用与 MyClass 无关的类型,将调用第一个版本。如果我使用 MyClass 类型(无论模板参数类型是什么)调用 f ,那么将调用第二个版本。但现在,考虑:

If I call f with a type with no relation with MyClass, the first version will be called. If I call f with a MyClass type (whatever the template parameters type are) then the second version will be called. But now, consider :

template<typename T1, typename T2, typename T3>
MyDerivedClass : public MyClass<T1, T2> {};

MyDerivedClass 将调用什么版本的函数$ c> type?

What version of the function will be called for a MyDerivedClass type ?

推荐答案

这是在标准的第13.3节。第13.3 / 1段规定:

This is handled in section 13.3 of the standard. Paragraph 13.3/1 states:

第一个是更好的匹配,因为它不会涉及任何隐式转换。

The first one is a better match since it won't involve any implicit conversion.

这篇关于函数重载和模板扣除优先级的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-28 06:38