Помогите разобраться с виртуальным методом
От: ilya-nz  
Дата: 25.01.10 12:17
Оценка:
Есть движок theEngine, внутри которого определен класс SomeClass, а у этого класса есть виртуальный метод.
Вот описание метода из доков:

virtual void someMethod::Tick  ( const someStruct*  somestruct   )  [inline, virtual]
Called when tick is happening.

Вот сам код метода:
class SomeClass
{
public:
    virtual ~SomeClass() {}

    /// Called when tick is happening.
    virtual void Tick(const someStruct* somestruct) { }
};





В main создается экземпляр движка, внутри которого постоянно происходит событие Tick. Как сделать, чтобы при наступлении этого события переменная someVar меняла значение (именно в main`е)?
int main(argc, argv)
{
  int someVar;

  // create theEngine instance
  ......................
  ......................
  ......................

  // handle tick ??
}



Спасибо.
Re: Помогите разобраться с виртуальным методом
От: placement_new  
Дата: 25.01.10 12:28
Оценка:
Здравствуйте, ilya-nz, Вы писали:
Никак вообщем то. Смотри другие пути.
Re[2]: Помогите разобраться с виртуальным методом
От: ilya-nz  
Дата: 25.01.10 12:49
Оценка:
Здравствуйте, placement_new, Вы писали:

_>Здравствуйте, ilya-nz, Вы писали:

_>Никак вообщем то. Смотри другие пути.

Не знаю, как лучше подступиться к проблеме.
Подскажи, плз, примеры/ссылки на что-нибудь подобное.
Re: Помогите разобраться с виртуальным методом
От: Caracrist http://1pwd.org/
Дата: 25.01.10 12:51
Оценка: 3 (1)
Здравствуйте, ilya-nz, Вы писали:

IN>Есть движок theEngine, внутри которого определен класс SomeClass, а у этого класса есть виртуальный метод.

IN>Вот описание метода из доков:

IN>
IN>virtual void someMethod::Tick  ( const someStruct*  somestruct   )  [inline, virtual]
IN>
Called when tick is happening.


IN>Вот сам код метода:

IN>
IN>class SomeClass
IN>{
IN>public:
IN>    virtual ~SomeClass() {}

IN>    /// Called when tick is happening.
IN>    virtual void Tick(const someStruct* somestruct) { }
IN>};
IN>





IN>В main создается экземпляр движка, внутри которого постоянно происходит событие Tick. Как сделать, чтобы при наступлении этого события переменная someVar меняла значение (именно в main`е)?

IN>
IN>int main(argc, argv)
IN>{
IN>  int someVar;

IN>  // create theEngine instance
IN>  ......................
IN>  ......................
IN>  ......................

IN>  // handle tick ??
IN>}
IN>



IN>Спасибо.


Не до конца понял вопрос, но попытаюсь угадать...

void Update(int &);

class SomeVarUpdater : public SomeClass
{
int &targetVar
public:
SomeVarUpdater (int &in_targetVar, ...) : targetVar(in_targetVar), SomeClass(...){}
virtual void Tick(const someStruct* somestruct) override;
};

void someVarUpdater::Tick(const someStruct* somestruct)
{
Update(targetVar);
SomeClass::Tick(somestruct);
}

int main(argc, argv)
{
 int someVar;
 {
   std::auto_ptr<SomeVarUpdater > theEngine(new SomeVarUpdater(someVar, ...));
   ...
 }
}
~~~~~
~lol~~
~~~ Cracked Minds (головоломки)
Re[3]: Помогите разобраться с виртуальным методом
От: ilya-nz  
Дата: 25.01.10 12:58
Оценка:
IN>Здравствуйте, placement_new, Вы писали:

_>>Здравствуйте, ilya-nz, Вы писали:

_>>Никак вообщем то. Смотри другие пути.

IN>Не знаю, как лучше подступиться к проблеме.

IN>Подскажи, плз, примеры/ссылки на что-нибудь подобное.


Имею ввиду, что вообще можно сделать с таким методом?
Нужно получить хоть какую-то контролируемую реакцию на сообщение Tick.
Re: Помогите разобраться с виртуальным методом
От: Alxndr Германия http://www.google.com/profiles/alexander.poluektov#buzz
Дата: 25.01.10 12:59
Оценка: 3 (1)
Здравствуйте, ilya-nz, Вы писали:

IN>Есть движок theEngine, внутри которого определен класс SomeClass, а у этого класса есть виртуальный метод.

IN>Вот описание метода из доков:

Есть ли возможность конфигурировать движок своим объектом класса SomeClass?
Если да, то создаешь наследника SomeClass:

class WannaChangeSomeVar : public SomeClass
{
public:
   WannaChangeSomeVar(int& var) : m_var(var) { }
   virtual void Tick(const someStruct* /*somestruct*/) { m_var = anythingYouWant; }
};

// ...

int main()
{
   int someVar;
   WannaChangeSomeVar obj(someVar);

   // ...
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.