Pertanyaan error C2823: template typedef adalah ilegal - fungsi pointer


Saya ingin mendefinisikan tipe pointer fungsi menggunakan template. Namun, VS 2013 saya bahwa 'template typedef adalah ilegal'. Saya mencoba menulis sesuatu seperti ini:

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

Sayangnya ini tidak dikompilasi. Saya ingin menjaga hal ini tetap singkat. Pada dasarnya saya harus mendefinisikan tipe untuk pointer fungsi, yang argumennya adalah dari kelas template.


5
2017-10-17 04:20


asal


Jawaban:


Karena C ++ 11, Anda dapat menggunakan using kata kunci untuk efek sangat mirip typedef, dan itu memungkinkan template:

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

Sebelum itu, Anda harus memisahkan template dari typedef:

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

(dan nama jenisnya FuncPtr<U>::type bukan hanya FuncPtr<U>)


7
2017-10-18 15:57