Я отслеживаю три цветовых точки - красный, зеленый и синий.У меня есть класс currentFrames, который содержит пару кадров - кадр из камеры и некоторые вспомогательные - и некоторые методы для манипулирования / извлечения некоторой информации из кадров.Допустим, я могу определить центр тяжести каждой точки, а затем я хочу вызвать определенную функцию в зависимости от положения этого центра тяжести.Весь кадр разделен на сетку, и каждому сегменту сетки будет назначена функция - эта функция будет вызываться при обнаружении точки в этом конкретном сегменте.
Моя идея заключается в создании многомерного массива указателейфункциям-членам:
#define CALL_MEMBER_FN(object,ptrToMember) ((object).*(ptrToMember))
MyFuncPointerType functions[NUMBER_OF_POINTS][NUMBER_OF_SEGMENTS];
и затем назначить адреса функций следующим образом:
functions[0][0] = ¤tFrames::something;
Когда, например, первая точка будет расположена во втором сегменте сетки, тогдаЯ назову правильную функцию (и она будет вызвана из класса currentFrames - вот почему я передаю *this
как объект CALL_MEMBER_FN
:
CALL_MEMBER_FN(*this, functions[0][1])();
Я начал с не очень сложного примера -Я хочу вызывать разные функции для каждой точки, но одинаковые для каждого сегмента («в области действия точки»):
class currentFrames
{
public:
void someMethod();
private:
void calculateVelocity();
void redPointDetected();
void redPointGone();
typedef void (currentFrames::*MyFuncPointerType)();
MyFuncPointerType functions[];
}
Затем в конструкторе currentFrames я делаю следующее:
currentFrames::currentFrames()
{
this->functions[0] = ¤tFrames::calculateVelocity;
this->functions[1] = ¤tFrames::redPointDetected;
}
Затем в someMethod в классе currentFrames я пытаюсь вызвать функцию-член:
void currentFrames::someMethod()
{
CALL_MEMBER_FN(*this, this->functions[0])();
}
Но это дает мне segfault. Я попытался определить CALL_MEMBER_FN
как((ptrToObject)->*(ptrToMember))
, но это также дает segfault.
Как это должно быть сделано?Есть ли лучший способ добиться того, чего я хочу?