J'écris une méthode pour imprimer des espaces dans std::cout
, je sais qu'il existe d'autres façons d'utiliser la bibliothèque standard pour atteindre le même objectif. Quoi qu'il en soit, j'ai utilisé un typedef
pour stocker le nombre d'espaces et une surcharge de l'opérateur <<
. Mais ma surcharge n'est pas appelée du tout parce que mon typedef
est interprété comme un int non signé.C++ << surcharge de l'opérateur avec le même type
Alors, comment puis-je dire au compilateur d'appeler ma fonction à la place?
class MyClass {
private:
typedef unsigned int space_type;
public:
std::ostream& operator<< (std::ostream& _os, space_type _n_spaces) {
for (int _C = 0; _C < _n_spaces; _C++)
_os << " ";
return _os;
}
void PrintNumbers(char _a, char _b) {
space_type spaces = 5;
std::cout << _a << spaces << _b << std::endl;
}
}
int main() {
MyClass class_instance;
class_instance.PrintNumbers('K', 'X');
std::cin.get();
return 0;
}
Ceci est le résultat attendu:
K X
Ceci est la sortie I obtient:
K5X // 5 is interpreted as an unsigned int, so my overloaded function
// isn't called, instead is called the std overloading with unsigned int
Typedef ne crée pas de nouveau type, il crée simplement un alias de type existant. – kvorobiev