Konstrukt-Funktion für alte C-Strukturen

ntor

Stammuser
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:
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 ? :D

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
 
Zuletzt bearbeitet:

Hobo

New member
Hast Du diesen Workaround schon ausprobiert?
 

Hobo

New member
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?
 

ntor

Stammuser
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
 
Oben