【发布时间】:2021-10-28 10:06:12
【问题描述】:
我有以下枚举:
enum {
ClientRx,
ClientTx,
Server1Rx,
Server1Tx,
Server1RxDropped,
Server1TxDropped,
Server2Rx,
Server2Tx,
Server2RxDropped,
Server2TxDropped,
Server3Rx,
Server3Tx,
Server3RxDropped,
Server3TxDropped,
Server4Rx,
Server4Tx,
Server4RxDropped,
Server4TxDropped,
MaxVal
};
有没有办法创建适合原始枚举的服务器枚举数组以使此代码更通用? (例如,如果我想将服务器计数器的数量扩展到 100...)
某种形式的东西:
typedef enum {
ServerRx,
ServerTx,
ServerRxDropped,
ServerTxDropped
}eServerCounters;
eServerCounters ServerCountersArray[4];
enum {
ClientRx,
ClientTx,
ServerCountersArray,
MaxVal
};
获取枚举值:
ServerCountersArray[2].ServerRx
【问题讨论】:
-
我认为您对
enum是什么感到困惑。 -
这些只是索引......真正的计数器存储在一个数组中。
-
不管怎样,这就是所谓的“XY问题”。您遇到问题并提出了您认为可以解决问题的解决方案。然而,这个解决方案是不正确的——与其问如何解决解决方案,不如问如何解决代码实际应该解决的原始问题。
-
您需要重新考虑如何存储和访问数据。假设我想以编程方式迭代所有服务器 Rx 计数器,我该怎么做?
-
如果您可以控制计数器的存储方式,请修复它。如果你不这样做,那么至少围绕它创建一个对用户更友好的 API。比如,编写一个接受队列号参数的函数,或者字节移位并用子计数器屏蔽队列号。