[SOLVED]Klasa wzorcowa

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Awatar użytkownika
Hauleth
Wytworny Kaczor
Wytworny Kaczor
Posty: 382
Rejestracja: 18 sie 2008, 17:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86

[SOLVED]Klasa wzorcowa

Post autor: Hauleth »

Kod: Zaznacz cały

template < class T = int > class thread {
	private:
		void* (*func)( void* ); ///< Wskaźnik na funkcję, która ma być wątkiem.
		pthread_t th; ///<
		T* args; ///< Argumenty przekazywane do funkcji
		thread_attr* param;
		bool state; ///< status wątku
	public:
		/**
		 * @brief Konstruktor klasy @b Thread
		 *
		 * @param _func Wskaźnik do fungkcji, która ma zostać wywołana jako osobny wątek.
		 * @param _args Wskaźnik do argumentów, które mają zostać przekazane nowemu wątkowi
		 * @return
		 */
		thread( void*(*_func)( void* ), T* _args = NULL ) :
			func( _func ), args( _args ), state( false ) {
		};
		int start( const thread_attr* _param = NULL ) throw(threadError) {
			if ( state ) {
				throw threadError( "This thread has already started." );
			}
			int ret = NULL;
			param = (thread_attr*) _param;
			ret = pthread_create( &th, param, func, (void*) args );
			return ret;
		}
		void stop();
		void join() {
			pthread_join( th, NULL );
		}
};
Mam taką oto klasę ? i zastanawiam się jak ją nakłonić by przyjęła jako argument wzorca char*.

Edit:
Teraz mam problem bo muszę zrobić coś takiego:

Kod: Zaznacz cały

void * test( void * params ) {
 char** s = (char**)params;
 /* reszta kodu */
}
I to podać konstruktorowi, ale ten kod mnie nie zadowala :/
pinochet
Piegowaty Guziec
Piegowaty Guziec
Posty: 12
Rejestracja: 24 lut 2008, 15:28
Płeć: Mężczyzna
Wersja Ubuntu: 8.10

Odp: Klasa wzorcowa

Post autor: pinochet »

rozumiem że błąd kompilacji ? spróbuj typename albo podaj bezwzględnie nazwę typu przez thread<T>*
Awatar użytkownika
el.pescado
Zakręcona Traszka
Zakręcona Traszka
Posty: 734
Rejestracja: 26 maja 2005, 11:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: Klasa wzorcowa

Post autor: el.pescado »

Dlaczego wskaźnika do funkcji nie zadeklarujesz jako:

Kod: Zaznacz cały

T (*func)(T);
?
Awatar użytkownika
Hauleth
Wytworny Kaczor
Wytworny Kaczor
Posty: 382
Rejestracja: 18 sie 2008, 17:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86

Odp: Klasa wzorcowa

Post autor: Hauleth »

Nie nie ma błędu kompilacji. @el.pescado nie może być taka funkcja, bo to ma ułatwiać pracę z pthread, a jako argument pthread podaje się funkcję typu void* func( void* ). Obszedłem to tworząc typeneme char* cstring, ale i tak to mnie nie zadowala, jeśli nie ma innego rozwiązania, to jakoś przeżyję, ale to jak jest teraz nie za bardzo mi się podoba :/
Jeśli problem rozwiązany dodaj na początku tematu [SOLVED].

Biblioteka do C++ - Bust Lib: http://code.google.com/p/bust/
mikolajs
Wytworny Kaczor
Wytworny Kaczor
Posty: 352
Rejestracja: 15 paź 2008, 18:30
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: KDE Plasma

Odp: Klasa wzorcowa

Post autor: mikolajs »

by przyjęła jako argument wzorca char*.
Zdaje się, że w takich sytuacjach dla wskaźników robi się specjalizowaną wersję klasy.
Awatar użytkownika
Hauleth
Wytworny Kaczor
Wytworny Kaczor
Posty: 382
Rejestracja: 18 sie 2008, 17:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86

Odp: Klasa wzorcowa

Post autor: Hauleth »

A jak ją poinformować, którą klasę ma wybrać??
Jeśli problem rozwiązany dodaj na początku tematu [SOLVED].

Biblioteka do C++ - Bust Lib: http://code.google.com/p/bust/
mikolajs
Wytworny Kaczor
Wytworny Kaczor
Posty: 352
Rejestracja: 15 paź 2008, 18:30
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: KDE Plasma

Odp: Klasa wzorcowa

Post autor: mikolajs »

Piszesz klasę class thread<char*> kompilator najpierw spróbuje użyć tej klasy, a dopiero jeżeli nie pasuje ona do wzroca, to wyprodukuje z szablonu. Polecam "Pasja C++" :)
Awatar użytkownika
Hauleth
Wytworny Kaczor
Wytworny Kaczor
Posty: 382
Rejestracja: 18 sie 2008, 17:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86

Odp: Klasa wzorcowa

Post autor: Hauleth »

Dzięki. Muszę sobie kupić tę książkę.

PS
Biblioteka moja powoli nabiera kształtu ( ma być taką mini biblioteką ułatwiającą częste [wg mnie] prace na POSIX'ach ) :)
Jeśli problem rozwiązany dodaj na początku tematu [SOLVED].

Biblioteka do C++ - Bust Lib: http://code.google.com/p/bust/
mikolajs
Wytworny Kaczor
Wytworny Kaczor
Posty: 352
Rejestracja: 15 paź 2008, 18:30
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: KDE Plasma

Odp: [SOLVED]Klasa wzorcowa

Post autor: mikolajs »

A widziałeś commoncpp2?
Szablon w tym wypadku wydaje mi się zbędny. Lepiej jest dziedziczyć po klasie wątku. Sam korzystam czasami z wątków w QT4, które też opierają się na phtread.
Awatar użytkownika
Hauleth
Wytworny Kaczor
Wytworny Kaczor
Posty: 382
Rejestracja: 18 sie 2008, 17:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86

Odp: [SOLVED]Klasa wzorcowa

Post autor: Hauleth »

Nie nie widziałem. Może i tak, ale ja wolę wiedzieć co i jak. Tak mam wszystko jasne i klarowne.
Jeśli problem rozwiązany dodaj na początku tematu [SOLVED].

Biblioteka do C++ - Bust Lib: http://code.google.com/p/bust/
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 9 gości