Как преобразовать массив D в вариативный C?

Я хотел бы преобразовать массив в D формы:

string[] arrayStr = [ "hi, "is fun", "use D programming" ];

У меня есть функция C, которая принимает переменную C:

void c_func( const char* format, ... );

Я мог бы сделать:

foreach(str; arrayStr)
    func( str );

Но это похоже на взлом C variadic, и я бы предпочел напрямую преобразовать C vararg,

Как я могу это сделать?

Спасибо


person bioinfornatics    schedule 23.11.2011    source источник
comment
Вы всегда можете использовать libffi для построения вызова.   -  person Jan Hudec    schedule 23.11.2011


Ответы (1)


Массив D — это структура, состоящая из длины и указателя. Например, вы можете передать строку D в printf, отформатировав ее как "%.*s".

Поэтому, если вы передадите свой массив в аргумент функции C с переменным числом аргументов, он найдет long int (длина) и char[]* (ptr) в своих varargs.

person FeepingCreature    schedule 23.11.2011