d.shabalin Posted August 13, 2013 Share Posted August 13, 2013 Как сделать так, чтобы в скрипте заработал мой метод, имеющий переменное число аргументов? Пример: void packetBuilder::printf(Unigine::String str, ...){ va_list lst; va_start(lst,str); int StrLen=strlen(str.get()); bool begun=false; for(int i=0;i<StrLen;i++){ if(str.get()[i]=='%'){begun=true;i++;} switch(str[i]){ case 'i': if(begun)AddInt (va_arg(lst,int)); break; case 'c': if(begun)AddChar (va_arg(lst,char)); break; case 's': if(begun)AddString (va_arg(lst,char*)); break; case 'h': if(begun)AddShort (va_arg(lst,short)); break; case 'f': if(begun)AddFloat (va_arg(lst,double)); break; } begun=false; } va_end(lst); } При попытке импортировать в Unigine пишет Ошибка 2 error C2784: void Unigine::ExternClass<Class>::addFunction(const char *,Ret (__cdecl *)(Class *,A0,A1,A2,A3,A4,A5,A6,A7),const char *): не удалось вывести аргумент шаблон для "Ret (__cdecl *)(Class *,A0,A1,A2,A3,A4,A5,A6,A7)" из "void (__cdecl packetBuilder::* )(Unigine::String,...)" Link to comment
frustum Posted August 13, 2013 Share Posted August 13, 2013 There is no way to create function with variable number of arguments now. As a workaround you can export up to 8 function signatures and pass them into the master function: void foo(const char *format,...) { } void foo_0(const char *format) { foo(format); } void foo_1(const char *format,Variable v0) { foo(format,v0); } ... void foo_N(const char *format,Variable v0,...,Variable vN) { foo(format,v0,...,vN); } addFunction("foo",foo_0); addFunction("foo",foo_1); ... addFunction("foo",foo_N); Link to comment
d.shabalin Posted August 13, 2013 Author Share Posted August 13, 2013 Спасибо!Скажите, а планируется в будущем поддержка функций с переменным числом аргументов? Link to comment
frustum Posted August 24, 2013 Share Posted August 24, 2013 Variable argument functions will be available in the next SDK update. Link to comment
d.shabalin Posted August 30, 2013 Author Share Posted August 30, 2013 Thank you very much! Link to comment
Recommended Posts