d.shabalin Posted August 13, 2013 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,...)"
frustum Posted August 13, 2013 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);
d.shabalin Posted August 13, 2013 Author Posted August 13, 2013 Спасибо!Скажите, а планируется в будущем поддержка функций с переменным числом аргументов?
frustum Posted August 24, 2013 Posted August 24, 2013 Variable argument functions will be available in the next SDK update.
Recommended Posts