返回类的类型而不是对象的类型
return the type of a class instead of an object
>我想要这样的东西:
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?
}
这可能很糟糕,但我只是想知道这是否可能。
不,C++没有反射。
但是,您可以使用多态性来解决此类问题:
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>();
}
你能得到的最接近的可能是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;
}
虽然我认为这真的很奇怪,你没有描述你的真正问题。
您可以定义一个标签来标识类类型:
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;
}
相关文章:
- std::unordered_map 类型对象声明期间出现"field has incomplete type"错误
- C++ 多态模板类,模板类型对象的实例化
- 如何分配适合容纳 T 类型对象的缓冲区(可能过度对齐、可能有运算符 new 等)
- 如何构造一个 std::variant 类型对象,其自身 Templated 和构造函数转发参数
- C++:初始化指向具有不同类型对象的指针数组
- 在类 C++ 中构造的模板类型对象
- 如何将颁发者名称设置为x509_req类型对象
- 将任何数据类型/对象作为参数传递以确定其大小
- 将引用类型对象的数组从C#封送到C++
- <T> 从类型对象创建类型<T1>对象的构造函数
- C++是否有现有的方法来检查对象是否是派生类型对象
- C 模板:创建与现有对象相同的类型对象
- 链接列表中的虚函数 - 多种返回类型(对象)
- 没有适当操作员()的类型对象的呼叫
- 制作垫子类型对象的数组.输出窗口显示同一帧
- 抽象类型对象的分配
- 在std::list中就地创建自定义类型对象
- 接受泛型列表类型对象的参数
- C++-将模板类型对象强制转换为特定的数据类型
- 试图在C++中打印存储在类型对象数组中的信息