» »

C++ array in klicanje funkcij vsakega elementa

C++ array in klicanje funkcij vsakega elementa

zorangutan ::

Pozdravljeni,

imam nek razred CClass, ki vsebuje recimo 3 funkcije: f1, f2, f3.

Rad bi upravljal pet takih razredov v obliki arraya ali pa nekega "super-classa" in nato klical funkcije f1, f2 in f3 na vseh elementih tega arraya.

Ali obstaja kakšna bolj elegantna rešitev, kot pa je klicanje teh funkcij v for-zanki posamezno na vsakem elementu arraya
for (int i=0; i<5; i++)
     arrayelement[i].f1();


Oziroma, če hočem to naredit s superclassom, skrijem takšno for-zanko v interno funkcijo tega superclassa (in enako za ostali dve funkciji f2 in f3):
array_superclass.f1();


Hvala za pomoč.

smoke ::

Metode vsakega elementa boš moral v končni fazi itak poklicat, tak da kaj dosti tukaj ne morš nardit. Če ti je for-zanka kot taka grda, lahko mogoče uporabiš C++11 range-based-for, ki zgleda nekak tak:

int main(int argc, char** argv)
{
	CClass a[5];
	
	for(auto& el : a) {
		el.f1(); el.f2(); el.f2();
	}
}


Tisto z "superclassom" pa ne razumem najbolje kaj bi rad naredil oz. kakšen problem bi naj tak razred rešil.

Lep pozdrav.

mallard ::

V tistem CClass definiraj funkcijo, ki pokliče ostale 3 oz. kolikor jih pač je. Recimo ji fx.
CClass a[5];

auto fun = std::mem_fn(&CClass::fx);
std::for_each(std::begin(a), std::end(a), fun);

_Dormage_ ::

Torej problem loopa rešiš tako, da nardiš nov class v katerem narediš loop?
Poleg tega, da je bad practice, kaj si sploh rešil? Mogoče samo nisem razumel ?
V vsakem primeru se boš moral sprehoditi po vseh elementi in opraviti ustrezne klice.

Nekateri funkcijski jeziki ponujajo alternative...

cen1 ::

In kaj je narobe z zanko? Čisto legitimna rešitev.
Če rabiš večkrat pa zapakiraj zadevo v funkcijo ki sprejme array objektov in potem to kličeš.

smoke ::

Dobra praksa v C++ (in verjetno tut v drugih jezikih) je, da uporabljaš preverjene stvari (razen če imaš seveda dober razlog, da jih ne), in standardna C++ knjižnica je dobro stestirana. Tako, da je mallardova rešitev s std::for_each in std::mem_fn vbistvu najboljša :)


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Matematična analiza naloga (strani: 1 2 )

Oddelek: Šola
576508 (4858) lebdim
»

Pomoč pri json datoteki

Oddelek: Programiranje
71277 (924) sasha991
»

Surjektivno + Injektivno = Bijektivno ... huh!?

Oddelek: Šola
3213249 (8000) Math Freak
»

c++ two dimensional array v classu

Oddelek: Programiranje
111410 (1213) Senitel
»

[java] funkcija ekvivalentna print_r v PHP

Oddelek: Programiranje
161684 (1447) sverde21

Več podobnih tem