在我的枚举功能中设置默认值

时间:2013-12-02 21:39:35

标签: c++

我的问题是:如何在我的枚举类型的函数中设置默认值,作为枚举中的值之一。这是我第一次使用Enumerations和枚举函数。我对Intro / Beginner C ++有很多了解。

示例..设置默认值以返回HANDHELD?

对于提出更好/更清晰问题的任何建议都将不胜感激。

ComputerType SellerList::ReadAndReturnComputerType() const
{
      char type[MAX_NAME_LEN];
      cin >> type;

      if(strcmp(type, "desktop") == 0)
         return DESKTOP;
      else if (strcmp(type, "laptop") == 0)
         return LAPTOP;
      else if(strcmp(type, "tablet") == 0)
         return TABLET;
      else if(strcmp(type, "handheld") == 0)
         return HANDHELD;

 }

2 个答案:

答案 0 :(得分:1)

请不要在所有地方使用strcmpelse if来做那种事情...你正在做c ++!

至少执行类似以下代码的操作。它可以维护得更多,并且有一些改进,你可以使用相同的地图处理转换枚举/字符串和字符串/枚举(你甚至可以使用bimap!)。

#include <iostream>
#include <map>
#include <string>   

enum ComputerType
{
    DESKTOP,
    LAPTOP,
    TABLET,
    HANDHELD
};

ComputerType ReadAndReturnComputerType()
{
    // I assume this is not multithread othewise there wouldn't be any cin
    static std::map<std::string, ComputerType> type { 
        { "desktop", DESKTOP },
        { "laptop", LAPTOP },
        { "tablet", TABLET },
        { "handheld", HANDHELD } };

    std::string input;
    std::cin >> input;

    auto it = type.find(input);

    // Don't forget to clean the input here !
    // something like:
    //
    // boost::trim(input);
    // boost::to_lower(input);

    if (type.end() == it)
    {
        return HANDHELD;
    }
    return it->second;
}

答案 1 :(得分:0)

如果要在if语句

之前设置默认值
ComputerType SellerList::ReadAndReturnComputerType() const
{
      ComputerType defType = HANDHELD;
      char type[MAX_NAME_LEN];
      cin >> type;

      if(strcmp(type, "desktop") == 0)
         type = DESKTOP;
      else if (strcmp(type, "laptop") == 0)
         type = LAPTOP;
      else if(strcmp(type, "tablet") == 0)
         type = TABLET;
      else if(strcmp(type, "handheld") == 0)
         type = HANDHELD;
      return defType;
 }