I défini deux classes:invocation implicite de l'opérateur [C++]
class Token_
{
public:
virtual char operator*()const = 0;//this fnc cannot run implicitly
protected:
Token_()
{ }
Token_(const Token_&);
Token_& operator=(const Token_&);
};
et deuxième:
class Operator : public Token_
{
public:
Operator(const char ch):my_data_(token_cast<Operator_enm>(ch))
{ }
Operator_enm get()const
{
return my_data_;
}
Operator_enm set(const Operator_enm& value)
{
Operator_enm old_value = get();
my_data_ = value;
return old_value;
}
char operator*()const//this operator has to be invoke explicitly
{
return static_cast<char>(my_data_);
}
private:
Operator_enm my_data_;
};
et plus tard dans le programme que j'ai quelque chose comme ceci:
template<class R>
R Calculator::expr_()const
{
Token_* token = read_buffer_();
switch (*token)//here if I use explicit call of operator*() it works
{
case PLUS:
{
R result ;//not defined yet
return result;
}
case MINUS:
{
R result ;//not defined yet
return result;
}
default:
cerr << "Bad expr token.";
}
}
Pourquoi cet appel de l'opérateur *() ne peut pas être implicite? Y a-t-il un moyen de le rendre implicite? Merci.
On ne sait pas ce que vous entendez par implicite. Voulez-vous dire qu'il ne compile pas sauf si vous écrivez: switch (operator * (token))? –
Oui, je dois écrire token-> operator *() pour compiler avec succès. –
Je suggère fortement de renommer la classe Opérateur car elle est seulement la différence de cas du mot réservé 'operator'. Habituellement, c'est une mauvaise forme car il pourrait y avoir une faute de frappe facile mais très difficile à trouver. –