C++ 不带typedef的函数指针
是否可以在不使用typedef的情况下将预先声明的函数的类型用作函数指针 功能声明:C++ 不带typedef的函数指针,c++,c,function-pointers,typedef,syntactic-sugar,C++,C,Function Pointers,Typedef,Syntactic Sugar,是否可以在不使用typedef的情况下将预先声明的函数的类型用作函数指针 功能声明: int myfunc(float); 通过某些语法将函数声明用作函数指针 myfunc* ptrWithSameTypeAsMyFunc = 0; 不符合2003年的标准。是的,随着即将推出的C++0x标准、MSVC 2010和g++4.5: decltype(myfunc)* ptrWithSameTypeAsMyFunc = 0; 是的,可以在没有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
来执行此操作
int (*ptrWithSameTypeAsMyFunc)(float) = 0;
有关基础知识的更多信息,请参阅。不,目前还没有。C++0x将更改
auto
的含义,并添加一个新的关键字decltype
,让您可以这样做。如果您使用的是gcc/g++,您还可以考虑使用它的typeof
操作符,这非常类似(在处理引用时有细微的区别)。不,没有C++0xdecltype
:
int myfunc(float)
{
return 0;
}
int main ()
{
decltype (myfunc) * ptr = myfunc;
}
gcc有
typeof
作为C的扩展(不知道C++)()
是否可以在不使用typedef的情况下将预先声明的函数的类型用作函数指针
我要作弊一下
template<typename T>
void f(T *f) {
T* ptrWithSameTypeAsMyFunc = 0;
}
f(&myfunc);
模板
空隙f(T*f){
T*ptrWithSameTypeAsMyFunc=0;
}
f(&myfunc);
当然,这并非完全没有缺陷:它使用函数,因此必须对其进行定义,而像
decltype
这样的东西不使用函数,也不需要定义函数 您想要一个只能指向您自己的Delcareed函数的函数指针吗?@wheaties我想要一个指向与MyFunc具有相同签名的函数的函数指针您知道您可以对函数声明应用typedef
来定义其类型吗<代码>typedef int myfunc(浮点);myfunc*ptrWithSameTypeAsMyFunc=0代码>?大多数人都不知道这一点,认为他们需要丑陋的代码>(*FO)< /C> SyToal.GCC不需要在C++中使用<代码>类型> /COD>扩展,因为它实现了(即将成为标准)<代码> DeCytys/Cuff>,这几乎是相同的目的。问题是我的代码没有用C++启用的0X编译。因此,这对我来说不是一个可用的解决方案:SWith g++可以使用typeof(myfunc)
而不是decltype(myfunc)
,它甚至可以在非C++0x模式下工作。对我来说,这个解决方案是不可用的,但我会接受这个答案。也许我会改变我的代码,直到它用c++0x编译。
template<typename T>
void f(T *f) {
T* ptrWithSameTypeAsMyFunc = 0;
}
f(&myfunc);