Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Zagnieżdzenie szablonów w klasie statycznej

Ostatnio zmodyfikowano 2011-12-13 19:14
Autor Wiadomość
qba10
Temat założony przez niniejszego użytkownika
Zagnieżdzenie szablonów w klasie statycznej
» 2011-12-12 18:10:50
Mam taką klasę statyczną
C/C++
typedef boost::signal < void() > signal_t;
typedef boost::signals::connection connection_t;
template < class type >
struct MappingSignals {
    string name;
    connection_t connectObject;
    type * object;
   
};

class SignalsAndSlotEngine {
public:
   
    template < class className >
    static connection_t connect( className * object, string signalName,
    signal_t::slot_function_type slot ) {
        MappingSignals < className > temp;
        temp.name = signalName;
        temp.object = object;
        temp.connectObject = SignalsAndSlotEngine::m_sig.connect( slot );
        temp.connectObject.block( true );
        SignalsAndSlotEngine::SignalsArray.push_back( temp );
        return temp.connectObject;
    }
    static void doSignals();
private:
    static signal_t m_sig;
    static vector < MappingSignals > SignalsArray;
};


Zastanawiam się jak poprawnie utworzyć vector SignalsArray podając przy tym  nazw obiektu dla struktury MappingSignals ?
P-45553
pekfos
» 2011-12-12 18:14:51
konstruktorem?
P-45554
qba10
Temat założony przez niniejszego użytkownika
» 2011-12-12 18:24:20
Klasa statyczna może mieć konstruktor ?

Chodzi mi o to
C/C++
static vector < MappingSignals > SignalsArray;
MappingSignals wymaga podania nazwy obiektu bo jest tam użyty szablon.
Jak to zapisać ?
P-45556
pekfos
» 2011-12-12 19:26:58
A co to jest klasa statyczna? Jak coś to składowa lub obiekt statyczny.
Kiedy wymaga? Podaj log kompilatora bo pewnie nie chce się nikomu analizować twojego kodu..

PS: Zrób te metody inline normalnie a kod będzie czytelniejszy.
PS2: Konkretyzując szablon musisz podać typ a nie szablon.
P-45566
michalp
» 2011-12-12 20:31:11
Zrób klasę
SignalsAndSlotEngine
 jako szablon z parametrem
className
 i użyj go w klasie a nie tylko w metodzie (wtedy ta twoja metoda nie będzie musiała być szablonowa).
P-45570
qba10
Temat założony przez niniejszego użytkownika
» 2011-12-13 19:09:55
JA chce uzyskać takie efekt że metodą connect chce dodawać obiekty rożnych klas i ich wskaźniki zapisywać do tablicy bym mógł odwołać się potem do tych obiektów w metodzie doSignals. Dlatego nie mogę zrobić klasy szablonowej, a nie wiem jak stworzyć tablicę struktur MAppingSignals tak żeby móc dodawać do tej struktury obiekty różnych klas
P-45597
DejaVu
» 2011-12-13 19:14:17
C/C++
#include <vector>

class ISignal
{
public:
    //jakiś interfejs
    virtual ~ISignal() { };
};

class CKlasaPierwsza
    : public ISignal
{
};

class CKlasaDruga
    : public ISignal
{
};

int main()
{
    std::vector < ISignal *> v;
    v.push_back( new CKlasaPierwsza );
    v.push_back( new CKlasaDruga );
    //...
    for( auto i = v.begin(); i != v.end(); ++i )
         delete * i;
   
    v.clear();
    return 0;
}
P-45598
« 1 »
  Strona 1 z 1