2014-10-17 15 views
5

Voglio definire un tipo di puntatore di funzione utilizzando i modelli. Tuttavia, VS 2013 mi ricorda che "un modello typedef è illegale". Sto cercando di scrivere qualcosa del genere:errore C2823: un modello typedef è illegale - puntatore di funzione

template<typename SD> 
typedef void(*FuncPtr)(void *object, SD *data); 

Purtroppo questo non viene compilato. Mi piacerebbe mantenere questa cosa breve. Fondamentalmente ho bisogno di definire un tipo per un puntatore a funzione, il cui argomento è di una classe template.

+0

Aggiungi un tag di lingua (come il C++) in modo che le persone giuste può trovare questo ques zione. – CandiedOrange

+0

Fatto, grazie! – alias5000

risposta

7

Dal C++ 11, è possibile utilizzare la parola chiave using per un effetto molto simile typedef, e permette modelli:

template<typename SD> 
using FuncPtr = void (*)(void*, SD*); 

Prima di allora, si doveva separare il modello dal typedef:

template<typename SD> 
struct FuncPtr 
{ 
    typedef void (*type)(void*, SD*); 
}; 

(e il nome del tipo è FuncPtr<U>::type invece di FuncPtr<U>)

+0

Grazie per il suggerimento! – bvj

Problemi correlati