Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme.

Konstrukt-Funktion für alte C-Strukturen

Diskussion: Konstrukt-Funktion für alte C-Strukturen im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Hey Leute! Ich wollte mir gerade eine bequeme Funktion schreiben um auch C- structs als temporäre Objekte zu übergeben. ...

Antwort
Alt 05.02.12, 17:34   #1 (permalink)
 
Benutzerbild von ntor
 
Registriert seit: 31.07.11
ntor Leistung: Z3
Likes: 1
Standard Konstrukt-Funktion für alte C-Strukturen

Anzeige

Hey Leute!
Ich wollte mir gerade eine bequeme Funktion schreiben um auch C-structs als temporäre Objekte zu übergeben.

Bsp:

Code:
RectCollsion(rect_1,Construct<SDL_Rect>(50,50,10,10));
Und habe mir erhofft , dass die Funktion so funktionieren würde:
Code:
template<typename T,typename... var_type_list> inline const T& Construct(var_type_list... var_list)
{
     T ret_val = {var_list};
     return ret_val;
}
Als Vorbild habe ich mir die std::bind-Funktion aus der C++-<functional> Library genommen.
Leider lässt mein MinGW(4.6.1) das nicht durchgehen:
Error   
C:\Meine_Daten\Dropbox\Coding\SDL\SDL_Snake\util.h ||In function 'const T& Construct(type_list ...)':|
C:\Meine_Daten\Dropbox\Coding\SDL\SDL_Snake\util.h |9|error: parameter packs not expanded with '...':|
C:\Meine_Daten\Dropbox\Coding\SDL\SDL_Snake\util.h |9|note: 'var_list'|
||=== Build finished: 2 errors, 0 warnings ===|


Habt ihr schon mal eine elegante Lösung für sowas fabriziert ?

Hier ein etwas uneleganter (und exe-aufblähender(?)) workaround:
Code:
#define CONSTRUCT(struct_name,...) \
([](void)  \
{ \
  struct_name ret_val = {__VA_ARGS__}; \
  return ret_val; \
})();
Herzliche Grüße
nt0r
__________________
Nützt die Feder nichts , ist der Schreiber schuld

Geändert von ntor (05.02.12 um 17:37 Uhr)
ntor ist offline   Mit Zitat antworten
Alt 06.02.12, 09:36   #2 (permalink)
 
Registriert seit: 02.02.12
Hobo Leistung: Facit NTK
Likes: 0
Standard

Hast Du diesen Workaround schon ausprobiert?
Hobo ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 06.02.12, 15:05   #3 (permalink)
Themenstarter
 
Benutzerbild von ntor
 
Registriert seit: 31.07.11
ntor Leistung: Z3
Likes: 1
Standard

Zitat:
Zitat von Hobo Beitrag anzeigen
Hast Du diesen Workaround schon ausprobiert?
Bin ich jetzt blöd , oder hast du wirklich nichts geschrieben?

nt0r
__________________
Nützt die Feder nichts , ist der Schreiber schuld
ntor ist offline   Mit Zitat antworten
Alt 06.02.12, 18:24   #4 (permalink)
 
Registriert seit: 02.02.12
Hobo Leistung: Facit NTK
Likes: 0
Standard

Also wenn Du mich fragst: Ich hab schon was geschrieben. Du nicht. Schau nochmal die Stelle an, wo Du Deine Template Funktion einsetzt. Wo sind denn die ganzen ints?
Hobo ist offline   Mit Zitat antworten
Alt 06.02.12, 21:43   #5 (permalink)
Themenstarter
 
Benutzerbild von ntor
 
Registriert seit: 31.07.11
ntor Leistung: Z3
Likes: 1
Standard

Zitat:
Zitat von Hobo Beitrag anzeigen
Also wenn Du mich fragst: Ich hab schon was geschrieben. Du nicht. Schau nochmal die Stelle an, wo Du Deine Template Funktion einsetzt. Wo sind denn die ganzen ints?
Ich glaub wir haben grade aneinander vorbeigeredet...
Meintest du , ob ich meinem Workaround schon verwendet hab?
Jo , hab ich.
Und welche "ints" meinst du denn? Das soll schließlich eine allgemeine template-Funktion sein. Egal für welche structs.

Wenn du nicht verstehst was ich mein , dann schau dir mal "std::bind" an. Die benutzt das gleiche Konzept und leitet es auf nen Functor zurück.

Viele Grüße
nt0r
__________________
Nützt die Feder nichts , ist der Schreiber schuld
ntor ist offline   Mit Zitat antworten
Alt 06.02.12, 21:48   #6 (permalink)
 
Registriert seit: 02.02.12
Hobo Leistung: Facit NTK
Likes: 0
Standard

Construct<SDL_Rect, int, int, int, int>(50, etc.
Hobo ist offline   Mit Zitat antworten
Alt 06.02.12, 21:56   #7 (permalink)
Themenstarter
 
Benutzerbild von ntor
 
Registriert seit: 31.07.11
ntor Leistung: Z3
Likes: 1
Standard

Zitat:
Zitat von Hobo Beitrag anzeigen
Construct(50, etc.
Das frisst der Compiler doch automatisch via "decltype(50)".
War afaik schon immer so

Code:
template<typename T> T Add(T a,T b) 
{
    return a + b;
}
Kannst du ja auch mit
Code:
Add(12,28);
aufrufen.

nt0r
__________________
Nützt die Feder nichts , ist der Schreiber schuld

Geändert von ntor (06.02.12 um 22:00 Uhr)
ntor ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » Konstrukt-Funktion für alte C-Strukturen
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Funktion zum prüfen ob Funktion erlaubt ist Chatter (Web-) Design und webbasierte Sprachen 5 21.01.07 14:11
?¤hm, und wo ist das alte board? Marilyn Hackerboard.de-Feedback 6 03.10.06 01:47
Neue Gefahr durch Bot-Netze mit P2P-Strukturen jorey News & Ankündigungen 2 30.04.06 16:39
Alte 2,5" HDD - was machen? Case271 Hardware Probleme 4 15.10.04 15:47
Alte Schlager Sataan Music- & Filmbox 0 17.02.04 18:52


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61