2011-10-24 19 views
5

यदि मेरे पास एक इंटरफ़ेस है और इस इंटरफ़ेस को लागू करने वाले कई वर्ग हैं, तो क्या मैं अब कक्षा के प्रकार के रूप में तर्क के रूप में पास कर सकता हूं, न कि ऑब्जेक्ट?सी ++ वर्ग प्रकार तर्क के रूप में

कुछ इस तरह:

Interface *creatClass(class : Interface){ 
    return new class(); 
} 

संपादित करें:

template <class T> 
IFrame *creatClass(){ 
    return new T(); 
} 

void dfg(){ 
    IFrame *lol = creatClass<Button>(); 
} 

error C3206: 'creatClass' : invalid template argument for 'Dist_Frame', missing template argument list on class template 'Button' 

पी एस। Button विरासत IFrame

उत्तर

12

इसे "Template" कहा जाता है।

template <class T> 
T *creatClass(){ 
    return new T(); 
} 

आप इसे इस तरह से फोन करना होगा:

class InterfaceImpl : public Interface {...}; 
// ... 
InterfaceImpl *newImpl = creatClass<InterfaceImpl>(); 

संपादित

आप भी इस कोशिश कर सकते हैं, आप केवल Interface का उदाहरण बना सुनिश्चित करने के लिए:

template <class T> 
Interface *creatClass(){ 
    return new T(); 
} 

संपादित करें

#include <iostream> 
using namespace std; 

class IFrame{ 
    public: 
     virtual void Create() =0; 
}; 

class Button : public IFrame{ 
    public: 

     virtual void Create(){ cout << "In Button" << endl;}; 
}; 

template <class T> 
IFrame *creatClass(){ 
    return new T(); 
} 


int main() 
{ 
    IFrame *lol = creatClass<Button>(); 
    lol->Create(); 
} 

वास्तव में काम करता है के रूप में उम्मीद: अपना संपादन

को मैं इस परीक्षण कोड की कोशिश की। आपकी कक्षा परिभाषाओं में आपके पास कुछ अन्य कोडिंग त्रुटियां होनी चाहिए। इसे डीबग करें, इसका आपके मूल प्रश्न से कोई लेना देना नहीं है।

+0

संपादित करें – Vladp

+0

@vladp - इसे देखो। – littleadv

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

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