Ошибка компилятора с D-эквивалентом указателей на функции - PullRequest
1 голос
/ 19 ноября 2011

Я пытаюсь использовать D-эквивалентный указатель на функцию как способ указания необязательных функций как одного поля в структуре, для которой я инициализирую массив.Это было бы просто в C (кроме грязного синтаксиса), но я застрял.Эта программа:

struct Foo {
    ubyte code;
    bool yup;
    void function(ubyte[] data,  int size) special;
} 

void boof(ubyte[] data, int size)   {
    /*do something*/
}

static immutable Foo[] markdefs = [
  {0xF2,  true,   null},
  {0xE4,  true,   boof},
  {0xEE,  false,  null}
];

void main()  {
}

выдает мне следующие ошибки:

funptr.d(17): Error: function funptr.boof (ubyte[] data, int size) is not 
callable using  argument types ()
funptr.d(17): Error: expected 2 function arguments, not 0
funptr.d(17):        called from here: boof()
funptr.d(17): Error: cannot implicitly convert expression (boof()) of type 
void to void function(ubyte[] data, int size)

Я использую dmd для D2 на 64-битной машине Linux.

1 Ответ

4 голосов
/ 19 ноября 2011

В строке 17 использование boof является вызовом функции без параметров (D допускает отсутствие паренов). Вам нужно взять ссылку boof с оператором & .

...