Joissakin tapauksissa tarkistus voitaisiin hoitaa myös siten, että jäseneltä kysytään minkälaisella funktiolla oikeellisuus tarkistetaan:
/* Funktio- osoitin tarkistusfunktioon: */ typedef int (*Tarkistus_funktio)(Tarkistus_tyyppi *, string &); . . .int cNaytto::kysy_tiedot(cJasen &jasen) { Tarkistus_funktio tark; . . . kaikille kentille do { . . . kysy kenttä => jono tark = jasen.Tarkistus(k); virhe = 0; if ( tark != NULL ) virhe = tark(jono); } while ( virhe ); . . . }
Edellä totesimme, että tarkista_hetu(kerho,jono) ei ehkä riitäkään. Miksi? Jos lisäämme uutta nimeä, niin asia on aivan oikein. Mutta entäpä mikäli korjaamme sotua ja kirjoitamme vastaukseksi täsmälleen saman tekstin kuin alkuperäinenkin. Eikö alkuperäinen hetu tällöin löydy? Löytyypä hyvinkin. Siis tarkista_hetu "hermostuu" ja tulostaa virheilmoituksen:
Sotu esiintyy ennestään
ja vaatii uutta syöttöä!
Siis parametrit eivät riitä! Mitä pitää lisätä? Tästä ajattelutavasta saattaa seurata loputon kasa uusia parametrejä. Kasataan kaikki tarkistusten tarvitsemat parametrit yhteen ainoaan tietueeseen Tarkistus_tyyppi ja kutsutaan tarkistusfunktioita muodossa:
t_sotu(tarkistus_tiedot,jono);
Vastaavasti tietysti tarkistusfunktio-osoittimien kanssa
typedef int (*Tarkistus_funktio)(Tarkistus_tyyppi &, string &); . . . int cNaytto::kysy_tiedot(cJasen &jasen) { Tarkistus_funktio tark; Tarkistus_tyyppi tiedot(... . . . if ( tark != NULL ) virhe = tark(tiedot,jono); . . .