我有一个Timer类,该类在超时时调用函数指针。这个Times应该能够被复制的问题(实例可以在数组中交换)。复制后,m_callbackOwner无效。
那么,该如何处理呢?如何实现回调以允许复制?
#pragma once
#include "common/Function.h"
#include "helpers/Utils.h"
template<typename TimeoutCallbackOwner,typename TimeoutCallback>
class Timer
{
public:
Timer() : m_interval(0),m_value(0),m_callbackFunction(nullptr) {}
void setCallback(TimeoutCallbackOwner *cbOwner,TimeoutCallback cb)
{
assert(cbOwner && cb);
m_callbackOwner = cbOwner;
m_callbackFunction = cb;
}
void update(double dt)
{
if (m_interval < 0 || isEqual(m_interval,0))
{
return;
}
m_value += dt;
if (m_value >= m_interval)
{
m_value = 0;
if (m_callbackOwner,m_callbackFunction)
CALL_MEMber_FN(m_callbackOwner,m_callbackFunction);
}
}
void setInterval(double interval)
{
m_interval = interval;
m_value = 0;
}
double interval() const
{
return m_interval;
}
double value() const
{
return m_value;
}
bool isRunning() const
{
return m_value != 0;
}
private:
double m_interval;
double m_value;
TimeoutCallbackOwner * m_callbackOwner;
TimeoutCallback m_callbackFunction;
};