2016-11-21 3 views
0

Ich habe zu SFML-Objektklassen: Textbox.h und ErrorProvider.h, ich definierte zwei Objekte TB_Input (Textbox) und EP_Note (ErrorProvider). Wenn TextboxErrorProvider auslöst, wird ein roter Kreis gezeichnet.Verknüpfen Sie zwei Objekte

Ich versuche, die beiden zusammen zu binden, lassen Sie mich erklären: TB_Input und EP_Note müssen beide daran denken, dass sie miteinander verbunden sind.

Der Code Ich habe jetzt:

//Function to tie 2 objects 
template<typename ObjectType1, typename ObjectType2> 
inline void tie(ObjectType1& obj_1, ObjectType2& obj_2) { 
    obj_1.tieTo(obj_2); 
    obj_2.tieTo(obj_1); 
} 

Pseudo-Code für das, was ich brauche:

// Inside both classes 

template<typename ObjectType> 
void tieTo(ObjectType link_object) { 
    <Unknown Type> variable_that_stores_the_tiedTo_object = link_object; 
} 

Da ich die beiden gebundenen Objekte Ich kann nicht festen Typ verwenden ändern , also benutze ich Vorlagen.

+1

Sie können sie zu jeder internen Zeiger, und es dann machen, zu zeigen, was es tieds oder aus .... oder Wenn ich es falsch verstehe, kannst du dann ein Beispiel machen? –

+0

@LorenceHernandez Das habe ich getan. – Pinco

Antwort

0

Durch mehr Forschung habe ich herausgefunden, dass der beste Weg ist, Zeiger zu verwenden. Beide Klassen haben jetzt einen internen Void-Zeiger, der auf das gebundene Objekt zeigt, ich deneferenziere es dann und benutze es als normales Objekt.

Wenn Sie eine bessere Idee brauchen, lasse ich den Code hier, auch zögern Sie mich nichts zu fragen.


Button.h:

void tieTo(ObjectType& object) { 
    PTR_tiedTo = &object; 

    setPosition(object.getPosition().x + object.getSize().x + EP_offset, 
       object.getPosition().y + (object.getSize().y - radius*2)/2); 
} 

void ErrorProvider::raise(bool value) { 
    raised = value; 
} 


// PTR Definition: 
void *PTR_tiedTo; 

Textbox.h:

//Same tieTo() function template toghether with this: 

void Textbox::setEP(bool value) { 
    ErrorProvider *EP_ptr = static_cast<ErrorProvider*>(PTR_tiedTO); 
    EP_ptr->raise(value); 
} 
Verwandte Themen