Questa è una ripresa abbastanza lunga, poiché non sono sicuro che sia possibile, ma forse qualcuno più esperto di me nel modello metaprogrammazione mi illuminerà.Estrarre la convenzione di chiamata da un tipo di funzione usando il metaprogrammazione del modello in C++
sto scrivendo una funzione lua automatizzato sistema di rilegatura utilizzando i modelli, estraendo il tipo di funzione che utilizza la specializzazione parziale:
template<typename T, T FUNCTION> class Function_c;
template<typename R, R (*FUNCTION)()> class Function_c<R (*)(), FUNCTION>; //specialized version
Il problema è che questo non mi dire la funzione di convenzione di chiamata, quindi (in VS2012 32 bit) non verrà compilato per __stdcall e si bloccherà con __fastcall. Posso creare un'altra versione specializzata per affrontare con una particolare convenzione di chiamata, ad esempio:
template<typename R, R (__stdcall *FUNCTION)()> class Function_c<R (__stdcall *)(), FUNCTION>;
Ma il numero di permutazioni sta cominciando a sfuggire di mano: 2 (funzioni globali & utente) volte il numero massimo di parametri volte il numero delle convenzioni di chiamata.
Quindi mi chiedo se c'è un modo per ottenere la convenzione di chiamata come parametro del modello (probabilmente non, dal momento che non è proprio un tipo) per ridurre la quantità di copypasting.