2013-10-29 64 views
0

的我想是這樣的:返回類的類型,而不是一個對象

class* defineType(ofxDTangible &t) { 
    if(t.angle > PI) { 
     return STSequencer; 
    } 
    else if(t.angle > HALF_PI) { 
     return STSample; 
    } 
    return NULL; 
} 

所以我想不會返回類類型的對象,但類本身的類型。 這可能嗎?

我想是這樣的:

classType = defineType(tang); 
    if(classType != NULL) { 
     // create the object somehow? 
    } 

這也可能是壞的,但我只是想知道,如果這是可能的。

+6

你想做什麼就能做有這班嗎? – zch

+0

作了編輯解釋。 – clankill3r

回答

2

不,C++沒有Reflection

但是,可以使用多態來解決這類問題:

class ofxDTangible 
{ 
public: 
    float angle; 
}; 

class STbase 
{ 
public: 
    virtual ~STBase(){} 
}; 

class STSequencer : public STbase 
{ 
public: 
    STSequencer(const ofxDTangible &ofx){ /*...*/ } 
}; 

class STSample : public STbase 
{ 
public: 
    STSample(const ofxDTangible &ofx){ /*...*/ } 
}; 

shared_ptr<STbase> defineType(ofxDTangible &t) 
{ 
    if(t.angle > PI) { 
     return shared_ptr<STbase>(new STSequencer(t)); 
    } 
    else if(t.angle > HALF_PI) { 
     return shared_ptr<STbase>(new STSample(t)); 
    } 
    return shared_ptr<STbase>(); 
} 
1

你可以得到的最接近的可能是std::type_info

const std::type_info* defineType(ofxDTangible &t) { 
    if(t.angle > PI) { 
     return &typeid(STSequencer); 
    } 
    else if(t.angle > HALF_PI) { 
     return &typeid(STSample); 
    } 
    return NULL; 
} 

雖然我覺得這是非常奇怪的,你是不是說明你真正的問題。

+0

嗯,我認爲這是我真正的問題,如果我會這樣做:) 我只是想知道是否可以分離一段代碼。 – clankill3r

0

可以定義一個標籤來識別類類型:

enum class tag { null, sequencer, sample }; 
tag defineType(ofxDTangible &t) { 
    if(t.angle > PI) 
    return tag::sequencer; 
    if(t.angle > HALF_PI) 
    return tag::sample; 
    return tag::null; 
} 
相關問題