Jezor
g/Programujmy

W jaki sposób takie coś # zostało zrobione? boost::thread wygląda jak klasa szablonowa (możemy podać do niej funkcję o dowolnej sygnaturze), ale w przykładzie nie zostały w ogóle użyte dzióbki <> z typami, których musielibyśmy użyć np. przy korzystaniu z klasy std::vector (i każdej innej szablonowej):
std::vector<int> vec;

#
Jezor

@onyx: ? :)

#
onyx

@Jezor: Na początku skojarzyło mi się to ze zmienna liczbą parametrów, ale to jest w C i na funkcjach. W C++11 wprowadzono variadic templates i jak się popatrzy w szczegółowy plik nagłówkowy boost/thread/detail/thread.hpp to faktycznie tak jest, z tym że opatrzone jest to dyrektywami warunkowymi. Jeśli wsparcia dla C++11 w kompilatorze nie ma to są tam stosowane inne techniki.

#
Jezor

@onyx: no okej, wszystko działa dla funkcji. Kompiluje się jak powinno i jest elegancko. Ale kiedy próbuję zrobić to samo z klasą, to kompilator krzyczy, że brakuje mu typów w szablonie.

Rozwiązanie najbliższe temu z boost::thread, do jakiego doszłem to to. Nie wiem tylko, jak oni tam pominęli jawne podawanie argumentów szablonu - <void(*)(int)>

#
onyx

@Jezor: Niestety nie pomogę, sam dużo nie stosowałem variadic templates. Boost jest znaną biblioteką, która w pełni wykorzystuje możliwości i zawiłości języka C++ oraz zawiera w sobie najlepsze techniki programowania w tym języku. Robiona jest przez najlepszych. Nie jestem aż tak dobry, trzeba by było przejrzeć kod źródłowy (ja się nie piszę :D). Być może odpowiedź jest prostsza niż myślę, ale naprawdę nie umiem powiedzieć.

#
Jezor

Udało mi się dojść do takiego rozwiązania. :D
Szkoda tylko, że argumentów funkcji nie da się w żaden sposób przechować (po części się da, ale dla więcej niż 1 argumentu się wysypuje) w klasie Test. Ale to ma w sumie sens, skoro argumenów jest zmienna liczba...

trzeba by było przejrzeć kod źródłowy

Próbowałem, niewiele tam znalazłem :P

Nie jestem aż tak dobry

ale dobrze Ci idzie pomaganie mi z moimi programistycznymi problemami :D

#