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分钟时间将代码粘贴到看起来人性可读的格式。