C++一般関数とテンプレート関数呼び出し規則

1192 ワード

/**呼び出しルールは次のとおりです:1.関数テンプレートと一般関数の両方が実現できる場合は、一般関数2を優先的に呼び出す.関数テンプレート3は、空のテンプレートパラメータリストから強制的に呼び出すことができる.関数テンプレートは、リロード4を発生することもできる.関数テンプレートがよりよく一致する場合は、関数テンプレート*/を優先的に呼び出します.
まとめ:関数テンプレートが提供されている以上、普通の関数を提供しないほうがいい.そうしないと、二義性が現れやすい.
#include;
using namespace std;


/**
      :
1.                ,        
2.                    
3.           
4.               ,         
*/

//             
void myPrint(int a,int b) {
	cout << "       " << endl;
}
template
void myPrint(T a, T b) {
	cout << "     " << endl;
}
template
void myPrint(T a, T b, T C) {
	cout << "       " << endl;
}
void test01() {
	//1、                ,        
	//                 ,         ,           ,      
	int a = 10;
	int b = 20;


	myPrint(a, b); //      
	// 2、                    
	myPrint<>(a, b); //      
	//3、           
	int C = 30;
	myPrint(a, b, C); //         
	//4、                ,        
	char C1 = 'a';
	char C2 = 'b';
	myPrint(C1, C2); //      
}


int main() {
	test01();
	system("pause");
	return 0;
}