std::thread - argumenty konstruktora

std::thread - argumenty konstruktora
GO
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 2 godziny
  • Postów:148
0

Witam,
Mam zadeklarowany gdzieś w programie wskaźnik do obiektu typu std::thread:

Kopiuj
thread *t;

potem inicjalizuję go tak:

Kopiuj
t = new thread(&klasa::funkcja, argumentFunkcji1, argumentFunkcji2);

i dostaję coś takiego:
''no type named 'type' in 'class std::result_of<std::_Mem_fn<void (klasa::*)(typ_argumentu1, typ_argumentu2)>(typ_argumentu1, typ_argumentu2)>'
typedef typename result_of<_Callable(_Args...)>::type result_type;''
Jak mogę to poprawić?

Endrju
  • Rejestracja:około 22 lata
  • Ostatnio:ponad rok
1

Jako pierwszy parametr (parametr wywoływanej funkcji) musisz podać adres obiektu, na rzecz którego będzie wywołana funkcja klasa::funkcja, tzn. adres jakiegoś obiektu typu klasa. (To będzie this w tej funkcji)


"(...) otherwise, the behavior is undefined".
edytowany 2x, ostatnio: Endrju
GO
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 2 godziny
  • Postów:148
0

To znaczy coś takiego?

Kopiuj
t = new thread(this, &klasa::funkcja, arg1, arg2);

Jeśli o to chodziło, to nadal mam błąd (ten sam)...

edytowany 1x, ostatnio: gogolon
Endrju
  • Rejestracja:około 22 lata
  • Ostatnio:ponad rok
2

Wtf, programowanie przez permutacje to nie jest dobra rzecz.

Pierwszy parametr funkcji, która masz zamiar wywołać, to musi być wskaźnik na obiekt tej klasy, z której pochodzi funkcja:

Kopiuj
klasa jakis_obiekt;
t = new thread(&klasa::funkcja, &jakis_obiekt, arg1, arg2);

"(...) otherwise, the behavior is undefined".
edytowany 1x, ostatnio: Endrju
GO
Jako pierwszy parametr - cytat ze wcześniejszego posta, jeszcze przed edycją - zrozumiałem, że pierwszy parametr konstruktora...
Endrju
Poprawiłem, żeby nie było wątpliwości.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.