C++/Function/generic parameters — различия между версиями
Admin (обсуждение | вклад) м (1 версия: Импорт контента...) |
Admin (обсуждение | вклад) м (1 версия: Импорт контента...) |
(нет различий)
|
Текущая версия на 13:27, 25 мая 2010
Содержание
A Function with Two Generic Types
<source lang="cpp">
- include <iostream>
using namespace std;
template <class type1, class type2> void myfunc(type1 x, type2 y) {
cout << x << " " << y << "\n";
}
int main() {
myfunc(10, "I like C++"); myfunc(98.6, 19L); return 0;
}
</source>
Applying Generic Functions: A Generic Bubble Sort
<source lang="cpp">
- include <iostream>
using namespace std;
template <class X> void bubble(
X *items, // pointer to array to be sorted int count) // number of items in array
{
register int a, b; X t; for(a=1; a<count; a++) for(b=count-1; b>=a; b--) if(items[b-1] > items[b]) { // exchange elements t = items[b-1]; items[b-1] = items[b]; items[b] = t; }
}
int main() {
int iarray[7] = {7, 5, 4, 3, 9, 8, 6}; double darray[5] = {4.3, 2.5, -0.9, 100.2, 3.0}; for(int i=0; i<7; i++) cout << iarray[i] << endl; for(int i=0; i<5; i++) cout << darray[i] << endl; bubble(iarray, 7); bubble(darray, 5); for(int i=0; i<7; i++) cout << iarray[i] << endl; for(int i=0; i<5; i++) cout << darray[i] << endl; return 0;
}
</source>
Cast generic parameters
<source lang="cpp">
- include <iostream>
using namespace std; template <class T1, class T2> bool coerce(T1& x, T2 y) {
if (sizeof(x) < sizeof(y)) return false; x = static_cast<T1>(y); return true;
} int main() {
int i, j; float x; double y; char ch1;
i = "a"; ch1 = "b"; cout << "\ncoerce int, ch = "; cout << coerce(i, ch1); cout << " i = " << i << " ch1 = " << ch1; i = "a"; ch1 = "b"; cout << "\ncoerce ch, int = "; cout << coerce(ch1, i); cout << " i = " << i << " ch1 = " << ch1; x = 1.1; y = 2.2; cout << "\ncoerce fl, dbl = "; cout << coerce(x, y); cout << " x = " << x << " y = " << y; x = 1.1; y = 2.2; cout << "\ncoerce dbl, fl = "; cout << coerce(y, x); cout << " x = " << x << " y = " << y; cout << endl; cin>> i;
}
</source>
Generic Function Restrictions
<source lang="cpp">
- include <iostream>
- include <cmath>
using namespace std;
void myfunc(int i) {
cout << "value is: " << i << "\n";
}
void myfunc(double d) {
double intpart; double fracpart; fracpart = modf(d, &intpart); cout << "Fractional part: " << fracpart; cout << "\n"; cout << "Integer part: " << intpart;
}
int main() {
myfunc(1); myfunc(12.2); return 0;
}
</source>
Generic function template
<source lang="cpp">
- include <iostream>
using namespace std;
template <class X> void swapargs(X &a, X &b){
X temp; temp = a; a = b; b = temp;
}
int main(){
int i=10, j=20; double x=10.1, y=23.3; char a="x", b="z"; cout << "Original i, j: " << i << " " << j << "\n"; cout << "Original x, y: " << x << " " << y << "\n"; cout << "Original a, b: " << a << " " << b << "\n"; swapargs(i, j); // swap integers swapargs(x, y); // swap floats swapargs(a, b); // swap chars cout << "Swapped i, j: " << i << " " << j << "\n"; cout << "Swapped x, y: " << x << " " << y << "\n"; cout << "Swapped a, b: " << a << " " << b << "\n"; return 0;
}
</source>
template for value output
<source lang="cpp">
- include <iostream>
using namespace std; template <class T1, class T2> void sample(T1 x, T2 y); int main(void) {
sample(10, "hi"); sample(0.23, 10L); sample("Jamsa"s", "C/C++");
} template <class T1, class T2> void sample(T1 x, T2 y) {
cout << x << " " << y << endl;
}
</source>