在C中使用类似枚举的数据
发布时间:2020-12-16 10:45:16 所属栏目:百科 来源:网络整理
导读:我正在更新一段旧的C代码,并且遇到了设计问题,需要就最佳行动方案提出建议.代码处理几何数据.目前,代码定义了许多处理元素类型的全局常量: #define TETRAHEDRON 0#define HEXAHEDRON 1 每个常量都有与之相关的信息,这些信息保持不变,并且当前由一个类处理,
我正在更新一段旧的C代码,并且遇到了设计问题,需要就最佳行动方案提出建议.代码处理几何数据.目前,代码定义了许多处理元素类型的全局常量:
#define TETRAHEDRON 0 #define HEXAHEDRON 1 每个常量都有与之相关的信息,这些信息保持不变,并且当前由一个类处理,在我们的拓扑中. int Topology::nodesPerElement(int topType) { switch(topType) { case TETRAHEDRON: return 4; break; case HEXAHEDRON: return 8; break; } } 拓扑类具有许多这些功能,只需打开全局常量即可找出相关信息.有许多元素类型,并且switch语句引入了许多错误,这些错误不考虑所有元素类型.如果添加了元素类型,则需要修复所有这些方法.我需要一种更好的方法来保持关联信息的类型. 枚举是对此设计的改进,但它没有解决将数据与枚举关联的问题. 为简单起见,我想避免为每种类型实例化类,因为每个类都只包含不会改变的静态数据. 我真正需要的是一个“静态类”,它保存这些信息并执行如下的伪代码: class Tetrahedron : public TopType { static const int nodesPerElement = 4; static const std::string name = "Tet"; etc... } 拓扑中的每个方法都变得微不足道: int Topology::nodesPerElement(TopType topType) { return topType.nodesPerElement; } 有没有办法在C中这样做?我已经考虑过删除枚举并为每个拓扑类型分别设置子拓扑类,但我从其他人那里得到的反馈是,它太复杂了.我希望我的问题足够清楚. 解决方法
创建一个包含对象应支持的所有属性的基类,以及一个用于设置这些属性的私有构造函数.您不需要派生类,然后:您可以使用静态公共对象来创建所需的具有所需属性的对象.
class TopologyObject { private: int numberVertices; int numberFaces; // etc. public: int getVertices() { return numberVertices; }; int getFaces() { return numberFaces; }; protected: TopologyObject(int vertices,int faces) : numberVertices(vertices),numberFaces(faces) {}; public: static TopologyObject Tetrahedron = new TopologyObject(4,4); // etc. } 您可以通过TopologyObject :: Tetrahedron访问具有所有属性的Tetrahedron. 如果您根据对象类型决定需要更复杂的变量行为,那么您确实需要可重写行为的派生类和虚方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |