2014-05-10 8 views
6

के लिए टाइपिफ़ को घोषित करना मुझे पता है कि टाइपिफ़ को सी ++ में घोषित नहीं किया जा सकता है, लेकिन मुझे आश्चर्य है कि निम्न समस्या के लिए सबसे अच्छा समाधान क्या हो सकता है। मैं एक हेडर फाइल जो MyClass इस तरह की घोषणा की है:फॉरवर्ड एक टेम्पलेट क्लास

#include <TemplateClassHeaders> 

struct MyStruct 
{ 
    // ... 
} 

typedef Really::Long::TemplateClassName<MyStruct> MyClass; 

MyClass कई स्थानों में प्रयोग किया जाता है, लेकिन ज्यादातर सिर्फ एक सूचक क्यूटी संकेत-स्लॉट तंत्र के माध्यम से पारित किया जा रहा है। एक आगे की घोषणा की आवश्यकता होगी, लेकिन MyClass एक टाइपपीफ है जो काम नहीं करेगा। MyClass पर पॉइंटर का उपयोग करने वाले प्रत्येक शीर्षलेख में myclass.h जोड़ने से बचने का कोई तरीका है?

+0

'वर्ग MyClass;' गूगल, या यहाँ तक सुझाव दिया अतः लिंक पर, देख जब आप अपने सवाल लिख रहे होते हैं http://stackoverflow.com/questions/804894/forward-declaration-of-a प्रकट करना चाहिए -typedef-in-c? rq = 1 – mah

+1

@mah इसे एक दूसरा विचार दे रहा है या कम से कम पूरे प्रश्न को स्वचालित रूप से इसे कम करने और मुझे एक समान प्रश्न (बिना टेम्पलेट्स और टेम्पलेट तर्कों के साथ) को इंगित करने के बजाय आपको बताएगा 'क्लास माई क्लास' काम नहीं करेगा (और फिर भी काम नहीं करेगा अगर पुनर्विक्रय के कारण कोई टेम्पलेट शामिल नहीं था)। – jaho

+0

@Marian, 'क्लास MyClass;' कोई टेम्पलेट शामिल होने पर काम करेगा। –

उत्तर

10

आप आगे टाइप नहीं कर सकते-एक टाइपपीफ घोषित कर सकते हैं। लेकिन यदि आप कक्षाओं को अग्रेषित करते हैं- TemplateClassName और MyStruct दोनों पर निर्भर करता है, तो आप MyClass को परिभाषित करने में सक्षम होना चाहिए।

namespace Really { 
    namespace Long { 
    template <typename> 
    class TemplateClassName; 
    } 
} 

class MyStruct; 

typedef Really::Long::TemplateClassName<MyStruct> MyClass; 

MyClass *p = 0; 
+0

वास्तव में, धन्यवाद। – jaho

+0

यह बदसूरत, अनावश्यक गड़बड़ तय करने की जरूरत है। हमारे पास अरबों गुना अधिक उन्नत विशेषताएं हैं, "अरे, इस चीज़ का उपयोग ** ** नाम से **" मूल रूप से असंभव है - किसी को उस प्रकार के आंतरिक ज्ञान की आवश्यकता होती है जिसे किसी और ने परिभाषित किया है ** मूल रूप से ** टाइप किया गया टाइप करें! – user362515

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