Zagnieżdzenie szablonów w klasie statycznej
Ostatnio zmodyfikowano 2011-12-13 19:14
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ą 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 ? |
|
pekfos |
» 2011-12-12 18:14:51 konstruktorem? |
|
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 static vector < MappingSignals > SignalsArray;
MappingSignals wymaga podania nazwy obiektu bo jest tam użyty szablon. Jak to zapisać ? |
|
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. |
|
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). |
|
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 |
|
DejaVu |
» 2011-12-13 19:14:17 #include <vector>
class ISignal { public: 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; }
|
|
« 1 » |