[英]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.