我有以下卡类,我想检查基于card_type或card_value的输入验证。两者在程序中都是相同的类型,但在逻辑上是不同的。
这是验证这种方式的好方法吗?但无论如何,C ++不支持我想要的东西,因为它们都属于同一类型。我怎么能这样做呢?
typedef int type;
typedef int number;
struct card {
type card_type;
number card_number;
card(int t, int n) : card_type(t), card_number(n) {
check(card_type);
check(card_number);
}
bool check(const type& t)
{
if (t >= 4) {
cout << "Card Type is not valid " << endl;
return false;
}
return true;
}
bool check(const number& n)
{
return false;
}
};
显然我得到了错误的模糊函数重载。
答案 0 :(得分:1)
因为你使用&#34;输入&#34;我想你的类型很少,所以我会像这样使用枚举
enum type {A,B};
.
.
.
card(int t, int n) : card_type((type)t), card_number(n)
int main()
{
type x = A ;
number y = 5;
struct card my_card(1,2);
my_card.check(x);
my_card.check(y);
return 0;
}
另一个&#34; hackish&#34;我用过的解决方案是:
typedef unsigned int type;
typedef int number;
答案 1 :(得分:1)
使用强类型,然后您不必检查
enum class CardColor {Heart, Spade, Diamond, Club};
enum class CardValue {Ace, Two, Three, /*...*/, Queen, King};
struct Card {
CardColor color;
CardValue value;
};
然后
Card card{CardColor::Club, CardValue::Ace};