使用可变参数模板在事件基系统中传递参数时出错

时间:2016-07-28 01:03:45

标签: c++ templates

Main.cpp的

GameObject o;
ISubscriber *sub = new Subscriber<GameObject, int, int, int>();
static_cast<Subscriber<GameObject, int, int, int>*>(sub)->gameObject = &o;
static_cast<Subscriber<GameObject, int, int, int>*>(sub)->gameObjectFunction = &(GameObject::Sum);

//this next line is one that gives error
cout << (static_cast<Subscriber<GameObject, int, int, int>*>(sub)->CallFunction)(2,5);

Subscriber.h

template<class ObjectClass, class ReturnType, class ...Params>
class Subscriber : public ISubscriber
{
public:
    ObjectClass *gameObject;
    ReturnType(ObjectClass::*gameObjectFunction)(Params...);
public:     
    returnType  CallFunction(Params...) { (gameObject->*gameObjectFunction)(Params...); };

    Subscriber();
    ~Subscriber();
};

GameObject.h

class GameObject
{
public:
   int Sum(int a, int b) { return a + b; };    
public:
    GameObject();
    GameObject(int _x, int _y, int _w, int _h);
    virtual ~GameObject();
};

错误type 'int' unexpected

所以我正在做的是事件系统,在那里我可以调用具有&#34; ISubscriber *&#34;的列表的事件。对象每个&#34;订阅者&#34;持有&#34;对象*&#34;和#34;对象*&#34;中的函数指针。 &#34; ISubscriber&#34;除了作为&#34; Subscriber&#34;所以我可以将它们存储在vector中作为指针

创建新的Subscriber时,我们传递对象类型,返回函数指针类型以及任意数量的参数。我这样做是因为在决定我的&#34; gameObjectFunction *&#34;应该指向我们可以传递任何返回类型和任意数量的参数,因此我们可以指向任何函数。

一切正常,直到我需要在&#34; Main.cpp&#34;的最后一行使用可变参数模板。它说&#34;输入int意外&#34;如果我通过&#34; int,int&#34;作为可变参数模板参数。

此外,任何内存泄漏,静态/动态强制转换提示都不是我的问题的一部分,可能会有一些拼写错误,因为我花了10分钟时间将代码粘贴到看起来人性可读的格式。

0 个答案:

没有答案