работа с std :: bitset - PullRequest
       29

работа с std :: bitset

0 голосов
/ 31 декабря 2011

Существует определение класса и некоторые функции bool, которые проверяют некоторые атрибуты

  class MemCmd
  {
      friend class Packet;
      public:
        enum Command
        {
          InvalidCmd,
          ReadReq,
          ReadResp,
          NUM_MEM_CMDS
        };
      private:
        enum Attribute
        {
          IsRead,         
          IsWrite,             
          NeedsResponse,  
          NUM_COMMAND_ATTRIBUTES
        };

        struct CommandInfo
        {
          const std::bitset<NUM_COMMAND_ATTRIBUTES> attributes;
          const Command response;
          const std::string str;
        };
        static const CommandInfo commandInfo[];
      private:
        bool
        testCmdAttrib(MemCmd::Attribute attrib) const
        {
          return commandInfo[cmd].attributes[attrib] != 0;
        }
      public:
        bool isRead() const         { return testCmdAttrib(IsRead); }
        bool isWrite() const        { return testCmdAttrib(IsWrite); }
        bool needsResponse() const  { return testCmdAttrib(NeedsResponse); }
  };

Вопрос в том, как установить NeedsResponse в true или false до вызова needsResponse()

Обратите внимание, что attributes относится к типу std::bitset

UPDATE:

Я написал эту функцию:

void
setCmdAttrib(MemCmd::Attribute attrib, bool flag) 
{
    commandInfo[cmd].attributes[attrib] = flag;   // ERROR
}

void setNeedsResponse(bool flag)   { setCmdAttrib(NeedsResponse, flag); }

Но я получаю эту ошибку:

error: lvalue required as left operand of assignment

1 Ответ

1 голос
/ 31 декабря 2011

Из комментариев:

Здесь есть две проблемы

  1. Элементы данных, которые const должны быть инициализированы в конструкторе класса.
  2. Есличлены - const, позже изменить их невозможно.

Итак, инициализируйте (как минимум) элементы, которые должны иметь постоянное значение.Удалите const из тех членов, которые вы собираетесь изменить позже.

...