C ++ 11:通过基类指向派生类方法的完美转发

时间:2016-02-17 14:59:54

标签: c++ c++11 virtual-functions perfect-forwarding template-function

我希望通过基类指针完美地转发参数包,该指针指向包含特定类型的方法指针的派生类,然后使用完美转发的参数包调用该方法指针。 Sender<cARGS>类具有容器std::set<ReceiverBase<cARGS>*>。我想用相同的参数包值迭代容器(我知道该怎么做)。不同的ReceiverBase<cARGS>*将具有不同的派生类(Receiver<cPARENT, cARGS>)方法指针类型,但参数包类型将是相同的(派生类中的cPARENT类型是方法指针类型)。我有这个工作正常,参数包被复制。现在我希望像这样添加完美转发:

template<typename ...Ts>
void Notify(Ts&&...args)
{
    (m_parent->*m_notifyMethod)(std::forward(args)...);
}

据我所知,我无法使用虚拟模板方法。我尝试使用双重调度访问者模式,但是当我不知道持有方法指针的类的类型时,我不确定如何执行此操作。

template <typename ...cARGS>
class RecevierBase
{
public:
    virtual void Notify(cARGS...) = 0;
};


template <typename cPARENT, typename ...cARGS>
class Recevier : public RecevierBase<cARGS...>
{
    typedef void (cPARENT::* NOTIFY_METHOD)(cARGS...);
public:
    Recevier(cPARENT *parent, NOTIFY_METHOD notifyMethod) :
        m_parent(parent), m_notifyMethod(notifyMethod)
    {  }

    virtual void Notify(cARGS... args)
    {
        (m_parent->*m_notifyMethod)(args...);
    }

private:
    cPARENT *m_parent;
    NOTIFY_METHOD m_notifyMethod;
};

0 个答案:

没有答案