在不使用typedef的情况下,将prepreious声明的函数的类型用作函数指针是否可行?
功能声明:
int myfunc(float);
通过某种语法将函数声明用作函数指针
myfunc* ptrWithSameTypeAsMyFunc = 0;
答案 0 :(得分:21)
不符合2003标准。是的,即将推出的C ++ 0x标准和MSVC 2010以及g ++ 4.5:
decltype(myfunc)* ptrWithSameTypeAsMyFunc = 0;
答案 1 :(得分:6)
是的,可以声明一个没有typedef的函数指针,但不能使用函数名来做到这一点。
通常使用typedef,因为声明函数指针的语法有点巴洛克式。但是,typedef不是必需的。你可以写:
int (*ptr)(float);
将ptr
声明为指向float
并返回int
的函数的函数指针 - 不涉及typedef。但同样,没有语法允许您使用名称myfunc
来执行此操作。
答案 2 :(得分:3)
在不使用typedef的情况下,将prepreious声明的函数的类型用作函数指针是否可行?
我要欺骗一下
template<typename T>
void f(T *f) {
T* ptrWithSameTypeAsMyFunc = 0;
}
f(&myfunc);
当然,这并非完全没有陷阱:它使用函数,因此必须定义,而decltype
之类的东西不使用函数,也不需要定义函数。
答案 3 :(得分:1)
不,不是现在。 C ++ 0x将改变auto
的含义,并添加一个新关键字decltype
,让您可以执行此类操作。如果你正在使用gcc / g ++,你也可以考虑使用它的typeof
运算符,它非常相似(在处理引用时有一个细微的差别)。
答案 4 :(得分:1)
不,不是没有C ++ 0x decltype
:
int myfunc(float)
{
return 0;
}
int main ()
{
decltype (myfunc) * ptr = myfunc;
}
答案 5 :(得分:1)
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;
}
答案 6 :(得分:0)
int (*ptrWithSameTypeAsMyFunc)(float) = 0;
有关基础知识的详情,请参阅here。