Как получить все аргументы из следующей функции в c / c ++? - PullRequest
0 голосов
/ 15 сентября 2011

ниже приведена реализация моего метода

static VALUE myMethod(VALUE self, VALUE exc, const char* fmt, ...) { 
   // Need to get all the arguments passed to this function and print it 
}

функция вызывается следующим образом:

myMethod(exception, ""Exception message: %s, Exception object %d",
          "Hi from Exception", 100);

Можете ли вы предоставить код для myMethod(), который будет обращаться ко всем аргументам ираспечатайте их.

Заранее спасибо.

Ответы [ 3 ]

4 голосов
/ 15 сентября 2011

Макросы va_start и va_arg используются для получения переменных аргументов в функции.Пример можно найти на сайте Microsoft: http://msdn.microsoft.com/en-us/library/kb57fad8(v=vs.71).aspx

В вашем случае это немного сложнее, так как вам нужно проанализировать строку формата, чтобы точно знать, сколько аргументов нужно дать и какого типа они,К счастью, CRT содержит функцию для этого.Функция vfprintf может иметь va_list (который вы получаете из va_start).vfprintf будет использовать этот для обработки всех дополнительных аргументов.См. http://www.cplusplus.com/reference/clibrary/cstdio/vfprintf/ для примера.

1 голос
/ 15 сентября 2011

Одним из способов является использование vsnprintf ().

Пример кода:

char buf[256];
va_list args;

va_start(args, fmt);

if(vsnprintf(buf, sizeof(buf), fmt, args) > 0)
  fputs(buf, stderr);

va_end(args);
0 голосов
/ 15 сентября 2011

Вам нужно использовать макросы va_start и va_arg для получения аргументов. Вы можете взглянуть на это - у него есть несколько примеров.

http://www.go4expert.com/forums/showthread.php?t=17592

...