Предположим, у меня есть код C (dcomplex.h):Как использовать тип массива с фиксированным размером C в vala?
typedef double dcomplex[2];
и хотите использовать такой тип данных в Вала. Каким может быть минимальный файл vapi и вала?
(Конечная цель состоит в том, чтобы использовать типы C99 complex.h.)
Я пробовал много вариантов следующего dcomplex.vapi файла:
[CCode (cheader_filename = "dcomplex.h")]
namespace DComplex {
[SimpleType]
[CCode (cname = "dcomplex", has_type_id = false)]
public struct DoubleComplex {
}
}
и используя в Vala коде, как:
using DComplex;
void main()
{
DoubleComplex x = {1.0, 2.0};
stdout.printf("x = %f + i %f\n", x[0], x[1]);
}
компиляция
valac --vapidir . --pkg dcomplex test.vala
приводит к ошибкам:
error: too many expressions in initializer list for `Complex.DoubleComplex'
DoubleComplex x = {1.0, 2.0};
^^^
error: The expression `Complex.DoubleComplex' does not denote an array
stdout.printf("x = %f + i %f\n", x[0], x[1]);
^^^^
DoubleComplex х = {1,0, 2,0}; - может быть такой тип: «DoubleComplex» - это структура, а не массив из двух элементов? –
Правильное наблюдение, конечно. Такое поведение несколько ожидалось. Вопрос в том, что использовать вместо этого, чтобы оно все равно срабатывало. Vala vapi doc также говорит о 'public struct Sth: double {}' например. Но я не могу использовать его для массивов типа 'public struct DoubleComplex: double [2] {}'. –