C++ 如何复制函数回调?
我有一个定时器类,它在超时时调用函数指针。这一次应该能够复制的问题(它的实例可以在阵列中交换)。复制m_callbackOwner后,该所有者无效 那么,如何处理这个问题呢?如何实现回调以允许复制C++ 如何复制函数回调?,c++,function,callback,copy,swap,C++,Function,Callback,Copy,Swap,我有一个定时器类,它在超时时调用函数指针。这一次应该能够复制的问题(它的实例可以在阵列中交换)。复制m_callbackOwner后,该所有者无效 那么,如何处理这个问题呢?如何实现回调以允许复制 #pragma once #include "common/Function.h" #include "helpers/Utils.h" template<typename TimeoutCallbackOwner, typename TimeoutCallback> class Ti
#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;
};
#pragma一次
#包括“common/Function.h”
#包括“helpers/Utils.h”
模板
班级计时器
{
公众:
计时器():m_间隔(0),m_值(0),m_调用函数(nullptr){}
void setCallback(TimeoutCallbackOwner*cbOwner,TimeoutCallback cb)
{
断言(cbOwner&cb);
m_callbackOwner=cbOwner;
m_callbackFunction=cb;
}
无效更新(双dt)
{
if(m|u区间<0 | |相等(m|u区间,0))
{
返回;
}
m_值+=dt;
如果(m_值>=m_间隔)
{
m_值=0;
if(m_callbackOwner,m_callbackFunction)
CALL_MEMBER_FN(m_callbackOwner,m_callbackFunction);
}
}
无效设置间隔(双间隔)
{
m_区间=区间;
m_值=0;
}
双区间()常数
{
返回m_间隔;
}
双值()常量
{
返回m_值;
}
bool isRunning()常量
{
返回m_值!=0;
}
私人:
双m_间期;
双m_值;
TimeoutCallbackOwner*m_callbackOwner;
TimeoutCallback m_callback函数;
};
什么是呼叫成员\u FN
?你为模板提供了什么类型?请用一个或显示你用作TimeoutCallback
参数的类型的定义来回答你的问题。我很确定如果(m_callbackOwner,m_callbackFunction)
没有做你认为它做的事情。@ElderBug什么,你不认为OP超越了友元操作符,
?