Tentokrát bude úloha/hádanka buď značně triviální, nebo obtížná, a to v závislosti na tom, zda prokouknete trik, který bude třeba využít ;).
Zadání
Definujte funkci/šablonu funkce f
podle C++98, které když se předá argument typu int
, tak jej vytiskne na standardní výstup, a když se zavolá bez argumentů, tak vytiskne pseudo-náhodné číslo pomocí standardní funkce rand()
. Můžete použít libovolné funkce/šablony/makra ze standardní knihovny. Kromě příslušných #include
a definice funkce/šablony funkce f
nic nedefinujte. Definice musí být přenositelná a nesmí se spoléhat na nespecifikované či nedefinované chování.
Ukázka:
#include <iostream> #include <cstdlib> // Definice f // ... int main() { // Zde může být případné volání srand(), ale není to nutné // ... f(); // Vytiskne pseudo-náhodné číslo f(15); // Vytiskne 15 f(); // Vytiskne pseudo-náhodné číslo f(-456); // Vytiskne -456 }
"Vítězí" nejjednodušší řešení ;).
Řešení
Řešení je jednoduché:
void f(int n = std::rand()) { std::cout << n << std::endl; }
Bylo třeba si uvědomit, že implicitní hodnota parametru může být i výsledek volání funkce (psal jsem o tom zde). Ondrova odpověď byla správná.
Řešení?
Ale asi jsem nepochopil zadání ...
Re: Řešení?
Díky za odpověď. Cílem je to všechno nacpat do jediné funkce/šablony
f
(takhle to jsou dvě různé funkcef
). Takže až tak jednoduché to nebude ;).ad
posilam diff k Liborovu reseni:
Re: ad
Díky za odpověď. Takto je to správně ;).