Existe-t-il un moyen de surcharger un opérateur (en particulier, operator >>) en tant que pointeur de fonction, puis lui affecter une fonction lors de l'exécution? Je veux être capable de regarder un fichier à l'exécution pour déterminer le format du fichier, puis affecter le bon pointeur de fonction à l'opérateur pour le faire fonctionner comme désiré. J'attribuerais la fonction correcte au constructeur, avant que l'opérateur ne soit appelé. Je me rends compte qu'il existe d'autres moyens (peut-être plus faciles) de faire la même chose, mais je me demande si c'est possible.Rendre un opérateur surchargé en C++ un pointeur de fonction
Voici ce que j'ai essayé:
bool Flag; // In global scope - set in main()
class MyClass
{
private:
int data;
friend istream & function1(istream & in, MyClass & c);
friend istream & function2(istream & in, MyClass & c);
public:
MyClass() :data(0) {operator>>=((Flag)?&function1:&function2);}
friend istream& (*operator>>)(istream & in, C & c);
};
// function1 and function2 definitions go here
int main (int argc, char **argv)
{
if (argc > 2)
Flag = ((atoi(argv[1]) > 1) ? 1 : 0);
MyClass mcInstance;
ifstream in(argv[2]);
in >> mcInstance;
return 0;
}
je reçois une erreur qui ressemble à ceci:
error: declaration of ‘operator>>’ as non-function
double possible de [ Est-il possible d'obtenir le pointeur de fonction d'un opérateur standard intégré?] (Http://stackoverflow.com/questions/17644816/is-it-possible-to-get-the-function-pointer-of-a- built-in-standard-operator) – aaronman
Il suffit de faire en sorte que la fonction 'operator >>' regarde 'Flag' et modifie son comportement en conséquence. –
Vous pouvez créer un pointeur de fonction vers un opérateur, mais il aura un nom normal à appeler. –