Il y a une définition de classe et certaines fonctions booléennes qui testent certains attributstravaille avec std :: bitset
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); }
};
La question est de savoir comment puis-je mettre NeedsResponse
à vrai ou faux avant d'appeler needsResponse()
S'il vous plaît noter que attributes
est de type std::bitset
MISE À JOUR:
j'ai écrit cette fonction:
void
setCmdAttrib(MemCmd::Attribute attrib, bool flag)
{
commandInfo[cmd].attributes[attrib] = flag; // ERROR
}
void setNeedsResponse(bool flag) { setCmdAttrib(NeedsResponse, flag); }
Mais je reçois cette erreur:
error: lvalue required as left operand of assignment
Vous avez des méthodes qui obtiennent l'état des différents bits dans 'bitset'. Pourquoi ne pas simplement ajouter quelques méthodes pour définir l'état des différents bits? Ou ai-je manqué le point de la question? –
vous avez raison. Comment puis je faire ça? pouvez-vous donner un extrait? – mahmood
Est-ce que ce sont les devoirs? Si oui, l'indice que je donnerais est qu'ils ressembleraient probablement à 'testCmdAttrib()'. –