我想要这样的事情:
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?
}
这可能很糟糕,但我只是想知道它是否可能。
答案 0 :(得分: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 :(得分: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;
}
虽然我觉得这很奇怪,你并没有描述你真正的问题。
答案 2 :(得分: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;
}