Jump to content

[SOLVED]Внешняя функция с переменным числом аргументов


photo

Recommended Posts

Как сделать так, чтобы в скрипте заработал мой метод, имеющий переменное число аргументов?

Пример:

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

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

Спасибо!
Скажите, а планируется в будущем поддержка функций с переменным числом аргументов?

Link to comment
  • 2 weeks later...
×
×
  • Create New...