Ich will es auch nicht überladen. Ich will praktisch für "B" genau das Verhalten das es gäbe, wenn kein "virtual" in "A" angegeben wäre. Die Funktion in A ist dann einfach verdeckt. Nicht überladen und auch nicht überschrieben. Das "virtual" ist leider für weitere abgeleiteten Klassen notwendig.
In dem Fall geht es tatsächlich eher um die Benutzung, theoretisch könnte ich der Methode auch einen anderen Namen geben, das fände ich allerdings nicht so nett und ich bin etwas schockiert, dass es dafür tatsächlich keine (offensichtliche) Lösung gibt.
Zur Verwendung:
Es geht einfach darum, dass meine Basisklasse eine Funktionalität anbietet, die technisch 64Bit Integer voraussetzt. (Noch genauer gesagt geht es um meine Stream-Klasse). Nun gibt es eine davon abgeleitete Klasse, die selbst Prinzip bedingt maximal Werte im Bereich von "size_t" zurückgibt. Um einige unnötige Casts bzw. Warnungen im 32Bit Build zu sparen, war meine Idee, einfach die Funktionen mit solchen zu verdecken, die das selbe tun, aber direkt den Typ zurückgeben.
EDIT:
Jonathan hat mich auf eine andere Idee gebracht. Scheint zu funktionieren, vielleicht gibt es aber auch eine direktere Lösung. (Getestet mit Clang & MSVC)
Code: Alles auswählen
class A
{
public:
virtual std::uint64_t SomeFunction();
};
class B : public A
{
public:
std::uint32_t SomeFunction(int Unused = 0); //Durch den Parameter versucht der Compiler nicht mehr zu überschreiben...
};