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

C++ 基于typedef定义的类似类型的函数重载,c++,overloading,C++,Overloading,我有下面的卡片类,我想根据卡片类型或卡片值检查输入的有效性。两者在程序中的类型相同,但逻辑上不同 这是验证这种方法的好方法吗?但无论如何,我想要的不是C++所支持的,因为两者都是相同类型的。我怎么能用另一种方式呢 typedef int type; typedef int number; struct card { type card_type; number card_number; card(int t, int n) : card_type(t), card_nu

我有下面的卡片类,我想根据卡片类型或卡片值检查输入的有效性。两者在程序中的类型相同,但逻辑上不同

这是验证这种方法的好方法吗?但无论如何,我想要的不是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;
    }
};
typedef int-type;
类型定义整数;
结构卡{
类型卡\ U型;
卡号;
卡片(int t,int n):卡片类型(t),卡片编号(n){
支票(卡式);
支票(卡号);
}
布尔检查(常数类型和t)
{
如果(t>=4){
cout因为您使用了“type”,我想您的类型数量很少,所以我会像这样使用enum

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;
     }
我使用的另一个“黑客”解决方案是:

typedef unsigned int type;
typedef int number;
由于您使用了“type”,我想您的类型数量很少,所以我会像这样使用enum

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;
     }
我使用的另一个“黑客”解决方案是:

typedef unsigned int type;
typedef int number;

使用强类型,则无需检查

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

使用强类型,则无需检查

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

如果你真的想这样做,就让它们成为不同的类型。你可以为每一个类型创建类。这还有一个好处,那就是当你打算传递数字时,如果你不小心传递了类型,那么你会得到一个编译错误,反之亦然。不过,最好的解决方案是有两个函数
checkType
checkNumber
。为什么要让你这么难呢urself?显式。我不确定,但再拥有两个类似乎很简单。在任何情况下,我都能看到您的逻辑中的一些有效性。如果您真的想要这样做,请将它们设置为不同的类型。您可以为每个类型创建类。这还有一个好处,即如果您在传递数字时意外传递类型,则会出现编译错误,反之亦然反之亦然。不过最好的解决方案是有两个函数
checkType
checkNumber
。为什么要让自己这么难呢?明确一点。我不确定,但有两个以上的类似乎很简单。在任何情况下,我都能从逻辑中看到一些有效性。enum似乎工作得很好,谢谢。我认为这是唯一有效的验证方法e有界数据类型的基本检查。enum似乎工作正常,谢谢。我认为这是验证有界数据类型基本检查的唯一有效方法。