Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de :: C++ (auch C++0x und C++11) ::  Funktionsparameter bestimmen     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
slux
Unregistrierter




Beitrag slux Unregistrierter 16:38:17 22.08.2012   Titel:   Funktionsparameter bestimmen            Zitieren

Hallo Leute,

ich möchte gerne eine Funktion bauen die ähnliche Parameter annehmen kann.

hier mal ein Beispiel

C++:
1
2
3
4
5
6
7
8
9
void foo ( char* var ){
//...
}
void foo ( const char* var ){
//...
}
void foo ( unsigned char* var ){
//...
}


Es soll im Grunde jede Art von char Pointer annehmen können, nun weiß ich nicht wie man das schreiben soll. Will nicht unnötig 10 Funktionen definieren und Templates sind jetzt auch nicht wirklich passend. Bin der Meinung irgendwo gesehen zu haben, dass es möglich sei.
dot
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.05.2004
Beiträge: 5618
Beitrag dot Mitglied 16:42:52 22.08.2012   Titel:              Zitieren

Overloading ist wohl genau das, was du suchst...

_________________
one point of view will never reveal the entire scene.
pumuckl
Moderator

Benutzerprofil
Anmeldungsdatum: 21.06.2005
Beiträge: 7326
Beitrag pumuckl Moderator 17:01:31 22.08.2012   Titel:   Re: Funktionsparameter bestimmen            Zitieren

slux schrieb:
Will nicht unnötig 10 Funktionen definieren und Templates sind jetzt auch nicht wirklich passend.
Wenn du das nicht haben willst, was dann? Folgende Möglichkeiten hättest du noch:

Makros -> der nächste der das mitbekommt knüpft dich an der höchsten Rah auf.
Code-Generatoren -> Overkill, wozu auch?

Wenn das Template dir nicht schmeckt, könntest du noch mit enable_if, static_assert & Co die Parametertypen einschränken. Aber vielleicht sollst ja auch für wchar_t's gehen? und für char32_t's, char16_t's und evtl. auch für Mylib::someCrazyFunStuffChar's?

_________________
Du brauchst Hilfe? - Forenregeln. Den richtigen Code posten - machs uns einfacher dir zu helfen
Don't feed the Help Vampires!
krümelkacker
Mitglied

Benutzerprofil
Anmeldungsdatum: 10.08.2010
Beiträge: 2232
Beitrag krümelkacker Mitglied 17:04:33 22.08.2012   Titel:   Re: Funktionsparameter bestimmen            Zitieren

Was machst du denn dann mit var? Brauchst du noch die Typinformation (also, ob es char, const char, unsigned char, etc war) oder ist dir das egal? Wenn dir das egal ist, kannst du ja sowas machen.

Wenn der Typ wichtig ist, kannst du aus foo auch selbst ein Template basteln und entsprechend auf char-Typen beschränken per enable_if.
Sone
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.05.2012
Beiträge: 3217
Beitrag Sone Mitglied 17:14:03 22.08.2012   Titel:              Zitieren

Eigentlich kommt es darauf an, was genau in den Funktionen passiert. Wenn es mehr oder weniger stark von der Größe, Vorzeichenbehaftung oder gar internen Darstellung ( :arrow: Fließkommazahlen) des Typs abhängig ist, dann ist wohl Überladung und/oder Einschränkung gut. Dabei sollte man dann beachten, Redundanz zu minimieren, sprich dass nicht alle Überladungen bis auf ein Detail gleich sind (in diesem Fall, Typ-Unabhängige Operationen einfach in Funktions-Templates auslagern).

_________________
You want to do X, and you think Y is the best way of doing so. Instead of asking about X, you ask about Y. | Der C++-Standard Draft: "Note: this is an early draft. It’s known to be incomplet and incorrekt [...]"


Zuletzt bearbeitet von Sone am 17:15:12 22.08.2012, insgesamt 2-mal bearbeitet
pumuckl
Moderator

Benutzerprofil
Anmeldungsdatum: 21.06.2005
Beiträge: 7326
Beitrag pumuckl Moderator 18:16:32 22.08.2012   Titel:              Zitieren

Sone schrieb:
Wenn es mehr oder weniger stark von der Größe, Vorzeichenbehaftung oder gar internen Darstellung ( :arrow: Fließkommazahlen) des Typs abhängig ist
slux schrieb:
Es soll im Grunde jede Art von char Pointer annehmen können,

Je nachdem welche char-Typen er meint, kommt von alledem nur die Größe oder garnichts in Betracht ;)

_________________
Du brauchst Hilfe? - Forenregeln. Den richtigen Code posten - machs uns einfacher dir zu helfen
Don't feed the Help Vampires!
camper
Mitglied

Benutzerprofil
Anmeldungsdatum: 06.08.2004
Beiträge: 5798
Beitrag camper Mitglied 18:31:08 22.08.2012   Titel:              Zitieren

Sowas?
C++:
1
2
3
4
5
6
7
8
9
10
#include <type_traits>
 
struct eat_all_char_ptrs
{
    template <typename T, typename = std::enable_if<std::is_integral<T>::value&&std::is_same<typename std::make_signed<typename std::remove_cv<T>::type>::type,char>::value>::type>
    eat_all_char_ptrs(T* p) : p(p) {};
    const volatile void* p;
};
 
void foo(eat_all_char_ptrs);


Zuletzt bearbeitet von camper am 18:31:18 22.08.2012, insgesamt 1-mal bearbeitet
Sone
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.05.2012
Beiträge: 3217
Beitrag Sone Mitglied 18:40:38 22.08.2012   Titel:              Zitieren

pumuckl schrieb:
Sone schrieb:
Wenn es mehr oder weniger stark von der Größe, Vorzeichenbehaftung oder gar internen Darstellung ( :arrow: Fließkommazahlen) des Typs abhängig ist
slux schrieb:
Es soll im Grunde jede Art von char Pointer annehmen können,

Je nachdem welche char-Typen er meint, kommt von alledem nur die Größe oder garnichts in Betracht ;)


Das das so nicht ist, hab ich nicht behauptet, meine Aussage war einfach etwas allgemeiner gefasst.

Kein Grund gemein zu werden.

_________________
You want to do X, and you think Y is the best way of doing so. Instead of asking about X, you ask about Y. | Der C++-Standard Draft: "Note: this is an early draft. It’s known to be incomplet and incorrekt [...]"
dot
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.05.2004
Beiträge: 5618
Beitrag dot Mitglied 22:15:45 22.08.2012   Titel:   Re: Funktionsparameter bestimmen            Zitieren

slux schrieb:
Es soll im Grunde jede Art von char Pointer annehmen können, nun weiß ich nicht wie man das schreiben soll.

Was genau meinst du damit? Wenn es sich um verschiedene Typen handelt, wirst du in aller Regel wohl auch verschieden damit umgehen wollen, ansonsten hast du wohl sehr wahrscheinlich grad was, sagen wir mal, nicht unbedingt Elegantes vor...

_________________
one point of view will never reveal the entire scene.
krümelkacker
Mitglied

Benutzerprofil
Anmeldungsdatum: 10.08.2010
Beiträge: 2232
Beitrag krümelkacker Mitglied 01:34:06 23.08.2012   Titel:              Zitieren

camper schrieb:

Sowas?
...

Das'ja lustig. Hatte einen ähnlichen Einfall und nannte ihn auch "sowas" ;)
c++.de :: C++ (auch C++0x und C++11) ::  Funktionsparameter bestimmen   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.