Spezialisierung der Funktionsvorlagen auf Funktionszeiger

Ich habe eine Desinfektionsfunktion, die ich nur mit (herkömmlichen) Zeigertypen ausführen möchte.

Mein Problem sind Funktionsvorlagen, bei denen ich die Funktion nur auf Zeiger beschränken kann. Aufgrund der Unterschiede bei der Umwandlung von Regeln zwischen Funktionszeigern und regulären Zeigern treten jedoch Probleme auf.

DasSanitize() function muss mit einer ganzen Reihe von Typen ausgeführt werden, von denen einige Zeiger sind und bereinigt werden müssen, andere Funktionszeiger mit unterschiedlichen Aritäts- und Parametertypen sind und nicht bereinigt werden sollten und einige Nicht-Zeiger-Datentypen sind was auch nicht saniert werden sollte.

Fehlt mir etwas Offensichtliches?

  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;
  }

Antworten auf die Frage(5)

Ihre Antwort auf die Frage