Мне нужно, чтобы конструктор объекта создавал новый поток. При этом, функция потока также должна быть методом этого объекта. Казалось бы - нормальные требования. Но у меня возникает проблема, которую я не знаю как решить. Проблема заключается в следующем: третий аргумент функции __beginthreadex имеет тип void(__stdcall*) (void*), но если функция потока определена как метод класса, то указатель на неё будет иметь вид void(__stdcall Bug:: *) (void *).
Расскажите пожалуйста как проблему решить (красиво)??? Я пытался сделать функцию потока friend'ом, чтобы "вытащить" её в глобальную область видимости, но она, естественно использует переменные и другие методы класса, при попытке вызвать функцию-метод с помощью Bug::Chase() (например) происходит следующая ругань: 'Bug::Chase' : illegal call of non-static member function. See declaration of 'Chase' Дело в том, что я совсем новичок и разобраться самому очень тяжело. Поможите, чем можите! Буду благодарен. |
Если уж юзать friend-овую функцию, то, поскольку она не в классе, а глобальная, то можно глобально определить экземпляр этого класса, а потом его и юзать в этой функции
З.Ы. - я пока тоже не профи, так что просьба не пинать ногами, а посоветовать, как лучше, если мой подход "не очень хороший" |
Sharkky
так тебе ж все написали: Цитата:
|
Sharkky
Примерно так: Код:
class Sharky |
Sharkky
Еще, если this передать, можно и без cast-а обойтись. И к тому же из статических функций можно вызывать нестатические, несмотря на то, что стандарт по этому поводу по-моему ничего определенного не говорит. |
vasketsov
Цитата:
|
К чему именно относится "как" из цитаты?
|
vasketsov
Как вызвать из статичесской функции класса нестатическую? Если подразумевается, что у нас есть указатель на объект, то чем это будет отличаться от "обычного" вызова метода "обычной" функцией, и почему стандарт об этом ничего не говорит? |
ivank
Я ничего не видел об этом в стандартах, может и проглядел в свое время. Но это работает правильно. Условно. X::nonstatic { } X::static { return nonstatic; } |
vasketsov
Вообще-то тогда какой-то бред получается. Если функция не статическая, то она обращается к полям объекта. А если она обращается к полям объекта, то нужно иметь объект аки указатель this. А откуда ему взяться в статической функции? |
ivank
Собственно, ты и озвучил главную проблему этого бреда. Но вот компилятор как-то справляется. |
Время: 02:50. |
Время: 02:50.
© OSzone.net 2001-