C++ 如何复制函数回调?

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

我有一个定时器类,它在超时时调用函数指针。这一次应该能够复制的问题(它的实例可以在阵列中交换)。复制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;

};
#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超越了
友元操作符,