2012-10-23 23 views
11

मैं बहुत की तरह एक cpp में एक विशेष समारोह को परिभाषित कर सकते हैं ...सीपीपी में टेम्पलेट विशेषज्ञता परिभाषित करें?

// हैडर

template<typename T> 
void func(T){} 

template<> 
void func<int>(int); 

// सीपीपी

template<> 
void func<int>(int) 
{} 

मैं कैसे एक विशेष वर्ग में एक विधि को परिभाषित कर सकते एक सीपीपी में? इसलिए जैसा (जो काम नहीं करता, मैं error C2910: 'A<int>::func' : cannot be explicitly specialized प्राप्त) ...

// हैडर

template<typename T> 
struct A 
{ 
    static void func(T){} 
}; 

template<> 
struct A<int> 
{ 
    static void func(int); 
}; 

// सीपीपी

template<> 
void A<int>::func(int) 
{} 
+0

आप की जाँच क्या इस: http://stackoverflow.com/questions/115703/storing-c-template-function-definitions-in-a-cpp-file – Reunanen

+0

@Pukku कि में एक विधि की चिंताओं विशेषज्ञता एक गैर-टेम्पलेटेड वर्ग, जो वास्तव में एक स्टैंडअलोन फ़ंक्शन की विशेषज्ञता के समान है (जैसा ऊपर मेरे कामकाजी उदाहरण में है)। मैं एक सीपीपी में एक विशेष _class_ में एक विधि को परिभाषित करने के बारे में पूछ रहा हूँ। – David

उत्तर

4

अपने .cpp फ़ाइल में वाक्य रचना निम्नलिखित का उपयोग करें:

void A<int>::func(int) 
{ 
} 

यह दृश्य सी ++ kinda सुविधा है।

जानकारी के लिए MSDN C2910 error description देखें:

यह त्रुटि संकलक अनुरूपता काम का एक परिणाम यह है कि विजुअल स्टूडियो .NET 2003 में किया गया था के रूप में उत्पन्न हो जाएगा :. कोड के लिए विजुअल स्टूडियो .NET 2003 और Visual C++ के विजुअल स्टूडियो .NET संस्करणों में मान्य होगा, टेम्पलेट <> हटाएं।

+3

यह विजुअल स्टूडियो की एक कंपाइलर निर्भर सुविधा है। प्रश्न देखें http://stackoverflow.com/questions/3749099/why-should-the-implementation-and-the-declaration-of-a-template-class-be-in-the और http://stackoverflow.com/ प्रश्न/495,021/क्यों-कर सकते हैं-टेम्पलेट्स-केवल होने वाली कार्यान्वित-इन-द-हैडर फ़ाइल – 8bitwide

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