मैं कोड का टुकड़ा निम्नलिखित है की वैध स्थिर सदस्य समारोह का उपयोग करना:वर्ग स्थापित नहीं किया जा सकता
यह जीसीसी-3.4 के तहत समस्याओं के बिना संकलित, जीसीसी-4.3, इंटेल संकलक, लेकिन MSVC9 तहत विफल रहता है।
MSVC "अपरिभाषित प्रकार c_traits<C>
के उपयोग, बताता सी = कम से वर्ग टेम्पलेट सदस्य समारोह void foo<C>::go(void)
संयोजित करते समय।
बिंदु यह संकलक अप्रयुक्त वर्ग के अप्रयुक्त सदस्य समारोह स्थापित करने के लिए कोशिश करता है, क्योंकि इस वर्ग के बस है सब पर इस्तेमाल नहीं किया।
मैं पूरी क्लास foo विशेषज्ञता बजाय विशेषज्ञता अपने सदस्य समारोह से काम के आसपास सकता है मुद्दा। लेकिन यह बात पूरी क्लास विशेषज्ञता विभिन्न कारणों के लिए मेरे लिए थोड़ा सा समस्याग्रस्त है कि।
बड़ा प्रश्न: सही क्या है?
- मेरे कोड गलत है और क्योंकि वे foo पूरी तरह से स्थापित नहीं करते जीसीसी और इंटेल संकलक सिर्फ मुद्दे पर ध्यान न दें, या
- कोड सही है और इस MSVC9 (वीसी 2008) बग है कि यह स्थापित करने के लिए कोशिश करता है अप्रयुक्त सदस्य कार्य?
कोड:
class base_foo {
public:
virtual void go() {};
virtual ~base_foo() {}
};
template<typename C>
struct c_traits;
template<>
struct c_traits<int> {
typedef unsigned int_type;
};
template<typename C>
class foo : public base_foo {
public:
static base_foo *create()
{
return new foo<C>();
}
virtual void go()
{
typedef typename c_traits<C>::int_type int_type;
int_type i;
i=1;
}
};
template<>
base_foo *foo<short>::create()
{
return new base_foo();
}
int main()
{
base_foo *a;
a=foo<short>::create(); delete a;
a=foo<int>::create(); delete a;
}
+1। – GManNickG