1、关于va_list,va_start,va_end
当无法列出传递函数的所有实参的类型和数目时,可用省略号指定参数表:
cocos2d::CCSequence *createSequence(cocos2d::CCFiniteTimeAction *pAction1,cocos2d::CCFiniteTimeAction *pAction2,...);
例子:
void fun(int a, ...)
{
int *temp = &a;
temp++;
for (int i = 0; i < a; ++i)
{
cout << *temp << endl;
temp++;
}
}
int main()
{
int a = 1;
int b = 2;
int c = 3;
int d = 4;
fun(4, a, b, c, d);
return 0;
}
Output::
1
2
3
4
CCSequence *AnimatePacker::createSequence(CCFiniteTimeAction *pAction1,CCFiniteTimeAction *pAction2,...)
{
va_list params;
va_start(params,pAction2); //用va_start函数获取参数列表中的参数,va_start使params指向第一个可选参数pActiion2
CCSequence *pPrev=CCSequence::create(pAction1,pAction2);
CCFiniteTimeAction *pNow=NULL;
while(pPrev)
{
pNow=va_arg(params,CCFiniteTimeAction *); //va_arg返回参数列表中的当前参数并使params指向参数列表中的下一个参数
if (pNow)
{
pPrev=CCSequence::create(pPrev,pNow);
}
else
{
break;
}
}
va_end(params); //使用完毕后调用va_end()结束,va_end把params指针清为NULL。
return pPrev;
}
2、这里附上我编写的老G和沈大海的代码以及资源,但是运行会出错,请大神帮忙解决,谢谢!
http://download.youkuaiyun.com/detail/h980740316/7234613