Specjalizacja szablonów funkcyjnych na wskaźnikach funkcji
Mam funkcję oczyszczania, którą chcę uruchamiać tylko na (tradycyjnych) typach wskaźników.
Moim problemem są szablony funkcji, które potrafię ograniczyć do funkcji tylko wskaźniki, jednak z powodu różnicowania reguł między wskaźnikami funkcji i zwykłymi wskaźnikami napotykam problemy.
TheSanitize()
funkcja musi działać na całą masę typów, z których niektóre są wskaźnikami i muszą zostać oczyszczone, a inne są wskaźnikami funkcji o różnym typie i typami parametrów i nie powinny być oczyszczane, a niektóre z nich są typami danych innych niż wskaźniki które również nie powinny być oczyszczane.
Coś oczywistego, którego brakuje?
template<typename T>
T* Sanitize(T* value)
{
return (T*)SanitizePointer(value); //SanitizePointer returns void*, so cast is necessary
}
template<typename T>
T Sanitize(T value)
{
return value; //Non-pointers can be passed without sanitization
}
int main()
{
int a;
int* b;
int (*c)();
Sanitize(a);
Sanitize(b);
Sanitize(c); //<- ERROR
return 0;
}