1.指针类型
#include <iostream>
using namespace std;
template <typename T>
void myfunc(T* val)
{
cout << val << endl;
return;
}
int main()
{
int i = 180;
const int* pi = &i;
myfunc(&i);
myfunc(pi);
return 0;
}
#include <iostream>
using namespace std;
template <typename T>
void myfunc(const T* val)
{
cout << val << endl;
return;
}
int main()
{
int i = 180;
const int* pi = &i;
myfunc(&i);
myfunc(pi);
return 0;
}
2.引用类型
#include <iostream>
using namespace std;
template <typename T>
void myfunc(T& val)
{
cout << val << endl;
return;
}
int main()
{
myfunc(120);
int i = 180;
const int j = i;
const int& k = i;
myfunc(i);
myfunc(j);
myfunc(k);
return 0;
}
#include <iostream>
using namespace std;
template <typename T>
void myfunc(const T& val)
{
cout << val << endl;
return;
}
int main()
{
int i = 180;
const int j = i;
const int& k = i;
myfunc(i);
myfunc(j);
myfunc(k);
return 0;
}
3.万能引用
#include <iostream>
using namespace std;
template <typename T>
void myfunc(T&& val)
{
cout << val << endl;
return;
}
int main()
{
myfunc(120);
int i = 180;
const int j = i;
const int& k = i;
myfunc(i);
myfunc(j);
myfunc(k);
return 0;
}
4.传值方式
#include <iostream>
using namespace std;
template <typename T>
void myfunc(T val)
{
cout << val << endl;
return;
}
int main()
{
int i = 180;
const int j = i;
const int& k = i;
myfunc(i);
myfunc(j);
myfunc(k);
return 0;
}
#include <iostream>
using namespace std;
template <typename T>
void myfunc(T val)
{
cout << val << endl;
return;
}
int main()
{
char str[] = "hello world!";
const char* const p = str;
myfunc(p);
return 0;
}
5.数组做实参
#include <iostream>
using namespace std;
template <typename T>
void myfunc(T val)
{
cout << val << endl;
return;
}
int main()
{
const char str[] = "hello world!";
myfunc(str);
return 0;
}
#include <iostream>
using namespace std;
template <typename T>
void myfunc(T& val)
{
cout << val << endl;
return;
}
int main()
{
const char str[] = "I Love China!";
myfunc(str);
return 0;
}
#include <iostream>
using namespace std;
template <typename T, unsigned LEN>
void myfunc(T (&val)[LEN])
{
cout << LEN << endl;
return;
}
int main()
{
const char str[] = "I Love China!";
myfunc(str);
return 0;
}
6.函数名做实参
#include <iostream>
using namespace std;
template <typename T>
void myfunc(T val)
{
cout << val << endl;
return;
}
void test() {}
int main()
{
myfunc(test);
return 0;
}
#include <iostream>
using namespace std;
template <typename T>
void myfunc(T& val)
{
cout << val << endl;
return;
}
void test() {}
int main()
{
myfunc(test);
return 0;
}