2014-05-06 27 views
1

我正在閱讀一些VC++代碼,並看到此函數註釋的一些用法_Function_class_(name)如何理解C++中的_Function_class_(name)

根據MSDN

name參數是由用戶指定的任意字符串。它存在於與其他名稱空間不同的名稱空間中。函數,函數指針或者最有用的函數指針類型可以被指定爲屬於一個或多個函數類。

但是,我仍然無法理解在什麼情況下應該使用它,以及它對於函數意味着什麼。有人可以解釋一下嗎?

謝謝

回答

2

該註釋允許您限制的集合,可以在特定情況下可以使用的功能。通常,當使用指向函數的指針和對函數的引用時,可以將這些指針和引用綁定爲引用具有正確類型的任何函數。

在某些情況下,您只希望該類型的一組受限制的函數在給定的上下文中可用,或者您可能希望確保某人確實意味着在該上下文中使用特定函數。例如,如果您使用指向回調函數的指針,並且對該回調內部可能執行的操作有限制,則可以使用此屬性來幫助開發人員在將新函數作爲回調函數傳遞時考慮這些限制。

請考慮以下示例:f註釋爲special_fp_type函數的類別。 g是同類型的,所以它是在同一個環境中爲f可用,但它沒有被標註爲是special_fp_type類的功能:

#include <sal.h> 

typedef _Function_class_(special_fp_type) void (*special_fp_type)(); 

void _Function_class_(special_fp_type) f() { } 
void g() { } 

void call_special_function(special_fp_type) { } 

int main() 
{ 
    call_special_function(f); 
    call_special_function(g); 
} 

如果編譯這個與/analyze,你會得到一個有用的警告爲g使用在這裏,告訴你,這是不是預期的類的功能的一部分:被賦值或傳遞應該有一個_Function_class_標註爲的至少一個功能:

警告C28023類別:'special_fp_type':

通常,只有一個函數類正在使用時,這是由於沒有聲明回調爲適當的類型。

+0

謝謝您的詳細解釋! –

相關問題