gpt4 book ai didi

c - 用于组合信用卡网络的位掩码枚举

转载 作者:太空宇宙 更新时间:2023-11-04 03:37:17 25 4
gpt4 key购买 nike

我试图将卡提供商表示为枚举。基本上信用卡(基于 BIN 编号)可以是 Visa 或 Mastercard,子类型可以是 Credit 或 Debit(简化示例,但我想处理所有情况(Maestro、Visa Electron、UATP...)

这似乎可行,但请看最后一个案例 CardProvider Visa | CardProvider MasterCard 我们知道这是不正确的。

我有办法避免这种情况吗?除此之外,当前的 enum 结构是否正确?

enum CardProvider
{
CardProviderNone = 0,
CardProviderMasterCard = 1 << 0,
CardProviderMasterCardDebit = 1 << 1,
CardProviderMasterCardCredit = 1 << 2,
CardProviderVisa = 2 << 0,
CardProviderVisaDebit = 2 << 1,
CardProviderVisaCredit = 2 << 2
};

CardProvider cardType1 = CardProviderMasterCard;
CardProvider cardType2 = CardProviderMasterCard | CardProviderMasterCardCredit;
CardProvider cardType3 = CardProviderMasterCard | CardProviderMasterCardDebit;
CardProvider cardType4 = CardProviderVisa | CardProviderVisaDebit;

// possible to prevent?
CardProvider cardType5 = CardProvider Visa | CardProvider MasterCard;

// works as expected:
assert(cardType1 & CardProviderMasterCard);
assert(cardType2 & CardProviderMasterCardCredit);
assert(cardType2 & CardProviderMasterCard);
assert(cardType3 & CardProviderMasterCard);
assert(!(cardType4 & CardProviderMasterCard));
assert(cardType4 & CardProviderVisa);

// works but shouldn't be allowed
assert(cardType5 & CardProviderVisa);

最佳答案

您可能需要为提供者和类型使用单独的枚举,并使用序列号而不是位掩码:

enum CardProvider
{
CardProviderNone = 0,
CardProviderMasterCard = 1,
CardProviderVisa = 2
};

enum CardType
{
CardTypeNone = 0,
CardTypeDebit = 1,
CardTypeCredit = 2
};

关于c - 用于组合信用卡网络的位掩码枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31552847/

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