2014-10-17 8 views
5

मैं टेम्पलेट का उपयोग करके फ़ंक्शन पॉइंटर प्रकार को परिभाषित करना चाहता हूं। हालांकि, वीएस 2013 मुझे लगता है कि 'एक टाइपिफ़ टेम्पलेट अवैध है'। मैं कुछ इस तरह लिखने की कोशिश कर रहा हूँ:त्रुटि C2823: एक टाइपिफ़ टेम्पलेट अवैध है - फ़ंक्शन पॉइंटर

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

दुर्भाग्य से यह संकलन नहीं है। मैं इस बात को छोटा रखना चाहता हूं। असल में मुझे फ़ंक्शन पॉइंटर के लिए एक प्रकार को परिभाषित करने की आवश्यकता है, जिसका तर्क टेम्पलेट क्लास का है।

+0

एक भाषा टैग (ग की तरह ++) में शामिल करें ताकि सही लोग इस प्रश्न पा सकते हैं tion। – CandiedOrange

+0

हो गया, धन्यवाद! – alias5000

उत्तर

7

सी ++ 11 के बाद से, आप एक प्रभाव के लिए using कीवर्ड बहुत typedef की तरह उपयोग कर सकते हैं, और यह टेम्पलेट्स अनुमति देता है:

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

इससे पहले, आप typedef से टेम्पलेट को अलग करने के लिए किया था:

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

(और प्रकार का नाम FuncPtr<U>::type के बजाय सिर्फ FuncPtr<U> है)

+0

टिप के लिए धन्यवाद! – bvj

संबंधित मुद्दे