C ++ тип void - как? - PullRequest
       38

C ++ тип void - как?

0 голосов
/ 15 июля 2010
typedef void(Object Sender) TNotifyEvent;

Это то, что я пытаюсь сделать из Delphi в C ++, но он не может скомпилироваться с «типом int неожиданным».

В результате должно получиться что-то, что я могу использовать так:1004 *

void abcd(Object Sender){
  //some code
}

void main{
   TNotifyEvent ne = abcd;
}

Как мне сделать такой тип (типа void)?Я не очень знаком с C ++.

Ответы [ 3 ]

4 голосов
/ 15 июля 2010

Вы хотите указатель на функцию, которая принимает Object и ничего не возвращает?

 typedef void (*TNotifyEvent)(Object Sender);
1 голос
/ 15 июля 2010

Нет, потому что в C ++ нет общего класса "объект". Вероятно, вам нужен обратный вызов (просмотр событий ...), для которого вам нужен функтор (перегрузка класса operator()) или указатель на функцию.

Вот пример использования указателя функции:

typedef void (*TNotifyEvent)(void *sender);
1 голос
/ 15 июля 2010

Если вы хотите определить тип функции, которая принимает Object в качестве параметра и ничего не возвращает, синтаксис будет:

typedef void TNotifyEvent( Object Sender );

РЕДАКТИРОВАТЬ, как ответ на комментарий.

Да, вы можете определить тип функции, и этот тип впоследствии может использоваться в разных контекстах с разными значениями:

TNotifyEvent func;          // function declaration (weird as it might look)
                            // same as: void func( Object Sender );
TNotifyEvent *fp = func;    // function pointer declaration -- initialized with &func
void func( Object Sender )  // cannot use the type when defining the function
{}
void foo( TNotifyEvent f ); // compiler translates to TNotifyEvent * f
                            // just as 'int a[5]' is converted to 'int *a' 
                            // in function parameter lists.
...