Ich glaube, das ist ein Beispiel für das seltsam wiederkehrende Vorlagenmuster. Es scheint mir, dass dies kompilieren sollte, tut es aber nicht. Dies ist mit Clang in Xcode 8.3.Warum kompiliert dieses merkwürdig wiederkehrende Vorlagenmusterbeispiel nicht?
template<class T>
class Fungeable
{
public:
virtual ~Fungeable() {}
virtual bool funge(const Fungeable<T>& inFungeable) const = 0;
};
class Blarg : public Fungeable<Blarg>
{
public:
virtual bool funge(const Blarg& inFungeable) const override { return true; }
};
int main(int argc, const char * argv[]) {
Blarg b;
Blarg x;
return static_cast<int>(b.funge(x));
}
Es scheint, wie das funktionieren sollte, weil Blarg ein Fungeable ist. Aber ich habe den Fehler 'funge' marked 'override' but does not override any member functions
Wenn ich die Unterschrift von Blarg::funge()
ändern, um eine Fungeable<Blarg>
so nehmen:
class Blarg : public Fungeable<Blarg>
{
public:
virtual bool funge(const Fungeable<Blarg>& inFungeable) const override { return true; }
};
Dann kompiliert.
Sollte nicht die erste Version funktionieren, da Blarg
definitionsgemäß eine Fungeable<Blarg>
ist?
"seit Blarg ist per definitionem ein Fungeable" Jeder 'Blarg' ein' Fungeable 'ist aber nicht jeder' Fungeable 'ist ein' Blarg'. –
tkausl