Observand utilitatea instructiunii foreach() din C#, am hotarat sa creez o functie pentru C/C++ care sa imite sintaxa si avantajul scrierii unui cod mai aerisit.
Functia foreach() are urmatoarele prototipuri:
-
template<typename thisType> void foreach( thisType element of unsigned arraySize in thisType (*arrayOfElements), void (*functionPointer)(thisType));
-
template<typename thisType> void foreach( thisType element in thisType (*arrayOfElements) until thisType lastElement, void (*functionPointer)(thisType));
unde:
- thisType este tipul datelor prelucrate;
- element este variabila care preia fiecare valoare din tabloul unidimensional arrayOfElements;
- functionPointer este un pointer la o functie de tip void care are un singur parametru de tipul datelor din arrayOfElements.
iar specializarile:
- arraySize este numarul de elemente care vor fi iterate in tabloul arrayOfElements; iteratia incepe de la elementul cu indicele 0 (zero);
- lastElement este punctul de oprire al iteratiei; la intalnirea acestui element, se iese din functia foreach(), fara ca lastElement sa fie prelucrat.
Exemplu de folosire al functiei foreach():
#include <iostream> #include <string> //header-ul ce contine definitia functiei foreach() #include "foreach.h" using namespace std; void Hello(int i) { cout<<" Hello from "<<i<<" !"<<'\n'; return; } void Func(string s) { cout<<s<<" func"<<'\n'; return; } int main(void) { int v[100]; int i; for(i=0; i<100; i++) v[i]=i; //base function foreach( i of 30 in v, Hello); if(error) { cout<<lastErrorMessage<<'\n'; } //overloaded foreach(i in v until 10, Hello); string text[3]; text[0] = "abcd"; text[1] = "efgh"; text[2] = "xyz"; string cuvant; string limita = "xyz"; //va afisa "abcd" si "efgh" foreach(cuvant in text until limita, Func); system("pause"); return 0; }Link descarcare header: foreach.h
PS: din pacate, WordPress nu este de acord cu upload-ul fisiereler de tip .h, astfel incat am fost nevoit sa convertesc continutul header-ului intr-un fisier .pdf.