gpt4 book ai didi

c++通过枚举定义对象类型

转载 作者:行者123 更新时间:2023-11-28 03:41:21 26 4
gpt4 key购买 nike

我有这个基本设置:

enum{
BASE,
PRIMITIVE,
...
};

class IUnknown{
public:
bool inline is(int type){return inv_type == type;}
private:
enum {inv_type = BASE};
};

class Primitive: public IUnkown{
private:
enum {inv_type = PRIMITIVE};
};

我的问题是我希望能够在 Primitive 实例上调用 is 并让它在类型等于我在 Primitive 类中声明的枚举中的值时返回 true。

我找到的唯一解决方案是将“is”函数声明为虚拟函数,并在每个子类中都有一个拷贝,但我想知道是否有可能以某种方式重新定义枚举并让是 IUnkown 中的函数 从那里取值

最佳答案

您可以让您的 IUnknown 类定义一个 protected 构造函数(然后必须从每个派生类调用它)。它将采用枚举值之一并将其存储。然后将存储的值与 is() 方法中的值进行比较。

如果您不喜欢这样,并且更愿意向 IUnknown 添加一个虚拟的 is() 方法,但又不想在每个派生类中都定义它,您可以这样做:

template <int Tinv_type>
class IUnknownT : public IUnknown{
public:
virtual bool is(int type){return inv_type == type;}
protected:
enum {inv_type = Tinv_type};
};

class Primitive: public IUnknownT<PRIMITIVE>{
};

关于c++通过枚举定义对象类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9142599/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com