wie: impliziete Typenumwandlung bei globalem überladenen Operator verhindern?



  • Die Sache ist die:
    Ich habe mir eine kleine Textausgabeklasse geschrieben. Nun habe ich unter anderem diese globalen überladenen Operatoren geschrieben:

    &m_ostream(&m_ostream, long int i);    //Implementation wo anders
    &m_ostream(&m_ostream, long ´double d);     //Implementation wo anders
    

    Wenn ich jetzt sowas schreibe wie:

    m_ostream a<<4
    

    regt sich mein compiler über Doppeldeutigkeit auf! Wie verhindere ich das?
    Von der Logik her müsste es ja gehen, dass ich den operator als explicit kennzeichne, aber dann gibts ärger wegen ungültigem Speicherbereich oder so...



  • Der Compiler weiß nicht, ob du (double)4.00 oder (int)4 meinst.

    m_ostream a << static_cast<long double>(4);
    


  • Weiß ich! Aber ich habe einen Weg gefunden! ich habe einfach zus. noch den operator für normale ints überladen, dann gehts!



  • Schau dir mal im Standard Literals (2.13) an. 4 ist vom Typ int, also weder long noch long double. Daher weiss der Compiler nicht in welchen Typ er nun umwandeln soll. Hättest du

    m_ostream a << 4l;
    

    geschrieben, hätte es funktionieren müssen.



  • Ja, der gedanke ist mir auch gekommen! (Deshalb funzts ja jetzt)


Anmelden zum Antworten