簡體   English   中英

沒有typedef的函數指針

[英]function pointer without typedef

是否可以將事先聲明的函數的類型用作函數指針而不使用typedef?

函數聲明:

int myfunc(float);

通過某種語法將函數聲明用作函數指針

myfunc* ptrWithSameTypeAsMyFunc = 0;

不符合2003年標准。 是的,即將推出的C ++ 0x標准以及MSVC 2010和g ++ 4.5:

decltype(myfunc)* ptrWithSameTypeAsMyFunc = 0;

是的,可以聲明不帶typedef的函數指針,但是不能,不能使用函數名來實現。

通常使用typedef,因為聲明函數指針的語法有點巴洛克式。 但是,不需要typedef。 你可以寫:

int (*ptr)(float); 

ptr聲明為指向使用float並返回int的函數的函數指針-不涉及typedef。 但是同樣,沒有語法允許您使用名稱myfunc來執行此操作。

是否可以將事先聲明的函數的類型用作函數指針而不使用typedef?

我要作弊

template<typename T>
void f(T *f) {
  T* ptrWithSameTypeAsMyFunc = 0;
}

f(&myfunc);

當然,這並非完全沒有陷阱:它使用函數,因此必須對其進行定義,而諸如decltype類的東西則不使用函數且不需要定義函數。

不,目前不行。 C ++ 0x將更改auto的含義,並添加一個新的關鍵字decltype ,您可以執行以下操作。 如果您使用的是gcc / g ++,則可能還會考慮使用它的typeof運算符,它非常相似(在處理引用時有細微的差別)。

不,不是沒有C ++ 0x decltype

int myfunc(float)
{
  return 0;
}

int main ()
{
  decltype (myfunc) * ptr = myfunc;
}

gcc使用typeof作為C的擴展(不了解C ++)( http://gcc.gnu.org/onlinedocs/gcc/Typeof.html )。

int myfunc(float);

int main(void) {
    typeof(myfunc) *ptrWithSameTypeAsMyFunc;
    ptrWithSameTypeAsMyFunc = NULL;
    return 0;
}
int (*ptrWithSameTypeAsMyFunc)(float) = 0;  

有關基本信息,請參見此處

暫無
暫無

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

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