簡體   English   中英

typedef void(* something)(someclass * something)-這是什么意思? 從未見過像這樣的typedef用法

[英]typedef void(* something)(someclass* something) - what does that mean? Never seen typedef usage like this

我正在閱讀linux內核代碼,遇到類似以下內容:

typedef void (* gps_location_callback)(GpsLocation* location)

然后可以像下面這樣使用:

gps_location_callback location_cb;

有人可以告訴我typedef是什么意思嗎? 我以前從未見過這樣的東西..謝謝!

這是一個函數指針 此類型的變量指向簽名為void (GpsLocation*)的函數:

void foo(GpsLocation *);

gps_location_callback f = foo;

// now use f(p) etc

沒有typedef,您將必須編寫:

void (*f)(GpsLocation *) = foo;

gps_location_callback用作函數的typedef ,該函數返回void並以GpsLocation*作為參數。

因此,每當您使用ore聲明類型為gps_location_callback的變量時,都在使用或聲明一個函數指針,該指針指向返回void並接受typedef列出的參數的函數。

這使gps_location_callback成為函數指針的別名,該別名以GpsLocation* location作為參數,不返回任何內容。

在這種typedef現在很容易根據需要創建變量函數指針,並且可以將其用作

gps_location_callback x,y,z;

現在,您具有三個函數指針,這些指針將參數作為GpsLocation* location並且不返回任何內容。

它是函數的typdef *用於回調

所以你可以做

if(location_cb != NULL)
{
    location_cb(my_gps_location);
}

回調對於基於事件的事情很有用,它允許您將函數傳遞給事件發生時可以調用的函數。 例如,當您獲取GPS位置時,請使用已獲取的GPS調用我的功能,這樣我就可以做自己的事情,例如將其保存到數據庫或在屏幕上顯示

gps_location_callback函數指針的定義,其中函數不返回任何內容( void ),並將指向GpsLocation的指針作為參數。

例如。 如果您具有以下功能:

void location_func(GpsLocation* location)

您可以將指向函數的指針分配給location_cb ,即。

gps_location_callback location_cb = location_func;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM