void SetSomeValue (int i); трассировки функции-члена экземпляра, которая установила эту переменную-член SomeValue с помощью SetSomeValue () - PullRequest
0 голосов
/ 31 октября 2011

Мне было интересно, есть ли подходящий шаблон проектирования.

моя ситуация выглядит примерно так:

class CMove {
public:
 void SetSpeed(float fSpeed) { m_fSpeed = fSpeed; }
 void update() { /* do somthing with fSpeed */}
 float m_fSpeed;
};

Class CSomeEvent_1 {
 void OnEvent() { m_Move.SetSpeed(10.f);}
 CMove m_Move;
};

Class CSomeCallBack_1 {
 void OnCallback() { m_Move.SetSpeed(20.f);}
 CMove m_Move;
};

, когда шаг обновления CMove, если CMove m_fspeed получил неправильную переменную,не хочупоэтому я хочу узнать, какой объект установил его как ложное.но существует много разных ролей существующих экземпляров, у которых есть класс CMove membervariable.

на первый простой путь это

void SetSpeed(float fSpeed, char* file, int line) { // do log where's calling from }

m_Move.SetSpeed(10.f, __FILE__, __LINE__);

я думаю, что это кровать

я хочупошлите, как показано ниже

void SetSpeed(SendObject pObj, float fSpeed) { m_latestSettingObj = pObj; m_fSpeed = fSpeed; }

есть ли подходящий шаблон дизайна?

или любая помощь будет полезна

спасибо.bonhyoung

1 Ответ

0 голосов
/ 31 октября 2011

Если я вас правильно понял, вы хотите отслеживать, откуда был вызван SetSpeed например CSomeEvent_1 или CSomeCallback_1 и какая скорость была установлена.

В вашем примере вы используете несколько экземпляров CMove, но для отслеживания вам потребуется общая структура для всех событий / обратных вызовов.

Один из подходов состоит в том, чтобы иметь статический список в CMove и использовать функцию-член SetSpeed ​​(SendObject ..), чтобы отслеживать, кто звонил и какая скорость была установлена. Список может быть циклическим списком, чтобы избежать переполнения памяти - не знаете, как часто вызывается SetSpeed?

Или вы хотите напрямую определить, когда было установлено неверное значение, тогда предложение hansmaad о выдаче исключения, содержащего информацию о вызывающем абоненте, было бы лучшим способом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...