函数重载基于typedef定义的类似类型

时间:2016-08-22 06:12:17

标签: c++ overloading

我有以下卡类,我想检查基于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;
    }
};

显然我得到了错误的模糊函数重载。

2 个答案:

答案 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};