派生值或附加属性的方法
Methods deriving values or additional attributes?
假设我有一个类A
,它具有用户定义的enum
类型的数据成员info
info
通过在info
上使用switch
,可以推断出使用类A
时需要的许多信息。例如,我可能想要获得info
的string
版本、更通用的short_info
(几个info
值被分组在同一个short_info
值下(等。
以下是我可以想象的两种方法,根据我对它们各自优点和缺点的理解:
- 在
A
中创建在info
上执行switch
的方法
优点:A
中的数据成员较少,因此存储空间较少
缺点:每次都必须为调用之间不变的值调用这些方法,这可能会导致执行速度变慢 - 创建在构造时初始化并在
info
更改时更新的数据成员
优点:更快地访问值,每次调用geter时不需要额外的计算
缺点:更多的存储空间
这两种方法中的一种通常更好吗?这取决于初始化后是否可以修改info
数据成员,还是其他因素
或者有更好的方法吗?
这两种方法中的一种通常更好吗?
不是。他们看起来都有点糟糕。
或者有更好的方法吗?
是。让info
的类型是一个以该数据为成员的类。
例如,代替
enum Info {
info1,
info2
};
class A {
Info info;
string info_desc() const; // switch on info
ShortInfo info_abbr() const; // another switch
};
你有
class Info {
string desc;
ShortInfo abbr;
}
Info info1 { "first info", ShortInfo::first };
Info info2 { "second info", ShortInfo::other };
class A {
Info info;
}; // Does this do anything anymore?
相关文章:
- C++:从属性类调用顶级类方法
- 类对象属性是否可以调用返回属性应具有的值的方法C++?
- 派生值或附加属性的方法
- 指示 Qi 变换属性失败的适当方法是什么?
- 根据 C++ 中的属性对对象类进行分区的优化方法
- Windows 脚本主机 - 错误 '800A01B6' 对象不支持此属性或方法
- 将提升属性树 (ptree) 序列化为向量的最快方法是什么
- 如何将按钮添加到节点的属性编辑器面板,该面板调用该节点内的方法?
- 正确的方法或设计模式,以简化类中的“operatorX”函数,以按给定顺序比较相同类型的属性
- 有没有一种方法可以创建具有广义属性的命名空间
- 当应用于静态方法时,为什么constexpr属性不起作用
- 通过"a pointer of the base class"访问未在基类中声明的子类的方法或属性(动态)
- LNK2001带有静态属性和方法的错误(QT,C )
- 从 Arduino 库中的方法获取私有布尔属性
- 成员属性作为方法的默认值
- 使初始化变量可供多个属性初始化方法访问
- QT UI指针中缺少属性和方法
- 删除/编辑 ATL COM DLL 属性/方法
- COM属性方法和常规接口方法之间的区别是什么
- 如何在Visual C++2008中查找未使用的属性/方法