C++ Behöver hjälp angående funktions parametrar!

Permalänk

C++ Behöver hjälp angående funktions parametrar!

Tjena, jag skulle behöva lite tips.
Jag har en funktion jag vill skapa som ska ta in en datatyp antingen int, double eller string och sen lite andra värden som har fasta datatyper.

Jag tänkte lösa detta genom att göra overload på 3 funktioner.

Här kommer ett exempel:

void function(int a){ Gör något! } void function(double a){ Gör något! } void function(string a){ Gör något! }

Är det bra att använda overloading, vad finns det för nackdelar/fördelar och finns det ett bättre sätt?

Tack på förhand!!

Permalänk
Medlem

Du kan använda dig av templates

#include <iostream> using namespace std; template <typename Type> Type max(Type a, Type b) { if (a > b) return a; return b; } int main() { cout << max(4,6) << endl; cout << max(4.5,4.2) << endl; cout << max("a","b") << endl; return 0; }

Permalänk
Medlem

Det är bra att använda overloading om du vill visa att koden implementerar samma funktion för olika typer.

I Xillis exempel så behöver tillexempel operatorn > vara överlagrad för de typer som den anropas med.

Visa signatur

.<

Permalänk

Personligen gillar jag templates mest eftersom jag tycker att just templates är en av de absolut bästa egenskaperna som språket har att erbjuda trots att det ökar kompileringstiderna. Dock så kan det tyvärr resultera i helt otydbara felmeddelanden när t.ex. > operatorn inte är implementerad för någon typ som man använder.

overloading har det också sin nackdelar det är inte alltid helt uppenbart vilken funktion som kommer att väljas.

Följande exempel är löjligt och ganska dumt men visar på vad jag menar.

#include <iostream> void funktion(int a) { std::cout << "Valde int" << std::endl; } void funktion(short a) { std::cout << "Valde short" << std::endl; } int main(int argv, char ** argc) { funktion(5); return 0; }

Vilken funktion tror du väljs? Om man inte talar ISO/IEC 14882:2011 (C++ standarden) flytande eller har en kopia till hands kanske det inte är helt trivialt att ta reda på varför resultatet blir som det blir heller.

Men om man jobbar med typer som inte på något trivialt sätt kan konverteras till varandra så är det ett bra sätt att få saker att fungera utan större ansträngning.

Hoppas det hjälper.