Forum: PC-Programmierung class A : public myInterface_I, public clasTemp<myInterface_I> => A remains abstract


von Zoukrates (Gast)


Lesenswert?

Hallo zusammen,

ich bin mir nicht sicher, ob ich etwas versuche, das prinzipiell nicht 
geht.
Sinngemäß geht es um das, was im Betreff steht:
>class A : public myInterface_I, public clasTemp<myInterface_I>
Dabei habe ich das Problem, dass A abstract bleibt, obwohl clasTempl 
alle Methoden von myInterface_I implementiert, auch die Signaturen 
stimmen - hab ich x-Mal geprüft.

Ich fürchte, ich habe noch ein falsches Verständnis von Klassentemplates 
- so ganz scheint es nicht dem search and paste Ansatz zu folgen?

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Versuch mal in "A" mit "using" die betreffenden Funktionen aus 
"clasTemp" sichtbar zu machen. Oder lass clasTemp einfach vom Interface 
ableiten.

Zoukrates schrieb:
> so ganz scheint es nicht dem search and paste Ansatz zu folgen?
Nein, definitiv nicht.

von Rolf M. (rmagnus)


Lesenswert?

Zoukrates schrieb:
> ich bin mir nicht sicher, ob ich etwas versuche, das prinzipiell nicht
> geht.
> Sinngemäß geht es um das, was im Betreff steht:
>>class A : public myInterface_I, public clasTemp<myInterface_I>
> Dabei habe ich das Problem, dass A abstract bleibt, obwohl clasTempl
> alle Methoden von myInterface_I implementiert, auch die Signaturen
> stimmen - hab ich x-Mal geprüft.

Das heißt, myInterface_I hat rein virtuelle Memberfunktionen? Werden die 
auch in A implementiert?

von Zoukrates (Gast)


Lesenswert?

>Das heißt, myInterface_I hat rein virtuelle Memberfunktionen?
Ja genau, rein virtuelle Methoden

>Werden die auch in A implementiert?
Nein, in der Templateklasse clasTemp, die auf A vererbet werden soll.
Dazu sei angemerkt, dass Beispiel ist etwas eingedampft.
Letztendlich soll es ein paar Methoden geben, die in A implementiert 
werden,
sofern es denn so weitergeht...

von Zoukrates (Gast)


Lesenswert?

Ich fürchte, ich versuche tatsächlich etwas, dass nicht geht.

So wie ich das jetzt sehe kann ein Klassentemplate nur mit dem 
spezifizierten Typ umgehen, wird aber nie selbst zu dem Typen.

Bzw. ist sowas denk/machbar:

template <class T>
class A : public T
{

}

obwohl, ich glaub, das machts nicht besser...

von Oliver S. (oliverso)


Lesenswert?

Zoukrates schrieb:
>class A : public myInterface_I, public clasTemp<myInterface_I>
> Dabei habe ich das Problem, dass A abstract bleibt,

Da clasTemp nicht von myInterface erbt, kann es auch dessen virtuelle 
Funktionen nicht implementieren.

Schreib hinter die virtuellen Funktionen in clasTemp mal overload 
dahinter (das sollte man grundsätzlich tun), dann zeigt dir der Compiler 
auch die passenden Fehlermeldungen.

Oliver

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Zoukrates schrieb:
> obwohl, ich glaub, das machts nicht besser...

Wie bereits in der ersten Antwort geschrieben, geht das und ist die 
korrekte Lösung.

Niklas G. schrieb:
> Oder lass clasTemp einfach vom Interface
> ableiten.

von Oliver S. (oliverso)


Lesenswert?

Das, was du vermutlich vor hast, nennt sich

https://en.wikipedia.org/wiki/Curiously_recurring_template_pattern

Aber ob das dein ursprüngliches Problem löst, keine Ahnung.

Oliver

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.