To dość długa fotografia, ponieważ nie jestem pewien, czy to możliwe, ale może ktoś bardziej doświadczony ode mnie w metaprogramowaniu szablonowym oświeci mnie.Wyodrębnianie konwencji wywołania z typu funkcji za pomocą metaprogramowania szablonowego w języku C++
Piszę zautomatyzowaną funkcję lua system wiążącej za pomocą szablonów, wydobywania rodzaj funkcji za pomocą częściowej specjalizacji:
template<typename T, T FUNCTION> class Function_c;
template<typename R, R (*FUNCTION)()> class Function_c<R (*)(), FUNCTION>; //specialized version
Problem jest, nie mów mi funkcję konwencji wywołania, więc (w VS2012 32 bity) nie skompiluje się dla __stdcall, a zawiedzie się z __fastcall. Mogę stworzyć kolejną specjalną wersję do czynienia ze szczególnym konwencji wywołującego, np:
template<typename R, R (__stdcall *FUNCTION)()> class Function_c<R (__stdcall *)(), FUNCTION>;
Ale liczba permutacji zaczyna wymknąć się spod kontroli: 2 (globalne & funkcji składowych) razy maksymalna liczba parametrów razy liczby zwoływania konwencji.
Zastanawiam się, czy istnieje jakiś sposób, aby uzyskać konwencję wywoływania jako parametr szablonu (prawdopodobnie nie, ponieważ tak naprawdę nie jest to typ), aby zmniejszyć ilość danych z kopiowaniem.