C++ 不带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的情况下声明函数指针,但不可以使用函数名

是否可以在不使用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++0x
decltype

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);