template mit zwei klassen



  • hiho, hab da mal eine frage

    nehmen wir manl an ich habe zwei klassen

    template<class X>
    class foo{
    };

    klasse foo nutzt bar aber die sollten beide mit gleichen klasse initialisiert werden

    also
    template<class X>
    class bar{
    };

    kann ich nicht schreiben, aber wie dann 😕



  • Hi,

    ich denke, ich habe Dich noch nicht richtig verstanden ... oder Du hast noch nicht ganz durchschaut, wie templates funktionieren oder was Du wirklich willst 😉

    "mit Klassen initialisieren" ?
    "foo nutzt bar" ?
    Am ehesten klingt das für mich nach

    template<typename X>
    struct bar{
       X a;
    };
    
    template<typename X>
    struct foo {
       bar<X> b;
    };
    
    int main() {
       foo<int> f;
       f.b.a = 3;
       return 0;
    }
    

    ???

    Gruß,

    Simon2.



  • Nein er will einfach das beide Klassen auf jedenfall den selben typen haben ...



  • Ahooo !! 💡 💡 💡

    OK, da kann ich gerade nichts anbieten.
    Ich würde allerdings auch nur sehr ungern ein Design wählen, bei dem ich das bräuchte....
    Ich würde eher so vorgehen, dass die parametrisierende Klasse gewisse Eigenschaften aufweisen muss - ob das direkt dieselbe Klasse ist, oder zwei unterschiedliche mit denselben Eigenschaften (z.B. zwei "Blätter einer gemeinsamen Basis"), wäre mir lieber egal.

    Nachtrag: Vielleicht funktioniert eine "künstliche Hürde" wie:

    template <typename T>
    struct foo {
       explicit foo() {}
    };
    
    template <typename T>
    class bar {
       T unused;
       foo<T> unusedChecker;
    public:
       bar() : unusedChecker(checkType(unused)) {}
    };
    
    template <typename T>
    foo<T> checkType(T i) { return foo<T>; }
    

    Alternativ könnte man bar auch so stricken, dass man es mit foo<T> parametrisiert, dann kann da auch nichts anbrennen. Wenn man T selbst braucht, kann man das mit einem Typedef in foo machen....

    Gruß,

    Simon2.



  • (D)Evil schrieb:

    Nein er will einfach das beide Klassen auf jedenfall den selben typen haben ...

    Wozu? Anders gefragt, in welcher Beziehung stehen die Klassen? Denn in Deinem Posting stehen sie in keiner sichtbaren Beziehung und dann ist es auch sinnlos (um nicht zu sagen unmöglich), den beiden Klassen denselben Template-Typ aufzuzwingen.

    "Klasse Foo nutzt Bar" => Na, hier haste es doch. Schreib die Schnittstelle ("a nutzt b") einfach entsprechend, dass sie nur funktioniert, wenn Foo denselben Template-Typ wie Bar hat.



  • wenn es zwei separate klassen sein sollen die beide identisch sind, warum keine basis klasse generieren und foo sowie bar ableiten?


Anmelden zum Antworten