Puntatore funzione come modello

Come scrivere un puntatore a funzione come modello?

template  T (*PtrToFunction)(T a); 

Suppongo che tu stia cercando di dichiarare un tipo (non puoi dichiarare una “variabile modello” senza un tipo concreto).

C ++ 03 non ha typedef template, è necessario usare una struct come soluzione alternativa:

 template  struct FuncPtr { typedef T (*Type)(T a); }; ... // Use template directly FuncPtr::Type intf; // Hide behind a typedef typedef FuncPtr::Type DoubleFn; DoubleFn doublef; 

Gli alias di template di C ++ 11 elimineranno la soluzione della struttura, ma attualmente nessun compilatore ad eccezione di Clang implementa effettivamente questo.

 template  typedef T (*FuncPtr)(T a); // Use template directly FuncPtr intf; // Hide behind a typedef typedef FuncPtr DoubleFn; DoubleFn doublef; 

Se intendi creare un tipo per quella funzione, potresti fare qualcosa del genere:

 template struct Function { typedef T (*Ptr)(T); }; 

Quindi usalo come

 int blah(Function::Ptr a) { } 

Non puoi farlo. È ansible creare solo puntatori di funzione con tipo concreto.

Va bene su Visual Studio 2015 e su GCC dovresti usare l’opzione da riga di comando -std=c++11

 template using fpMember = void (T::*)();