不带 typedef 的函数指针

发布于 2024-09-24 08:07:44 字数 195 浏览 9 评论 0原文

是否可以在不使用 typedef 的情况下使用预先声明的函数的类型作为函数指针?

函数声明:

int myfunc(float);

通过某种语法将函数声明用作函数指针

myfunc* ptrWithSameTypeAsMyFunc = 0;

Is it posible to use the type of a prefiously declared function as a function pointer without using a typedef?

function declaration:

int myfunc(float);

use the function declaration by some syntax as function pointer

myfunc* ptrWithSameTypeAsMyFunc = 0;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

影子的影子 2024-10-01 08:07:44

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

decltype(myfunc)* ptrWithSameTypeAsMyFunc = 0;

Not as per the 2003 standard. Yes, with the upcoming C++0x standard and MSVC 2010 and g++ 4.5:

decltype(myfunc)* ptrWithSameTypeAsMyFunc = 0;
笑看君怀她人 2024-10-01 08:07:44

是的,可以在没有 typedef 的情况下声明函数指针,但不可能使用函数名称来执行此操作。

通常使用 typedef,因为声明函数指针的语法有点巴洛克式。但是,typedef 不是必需的。您可以这样写:

int (*ptr)(float); 

ptr 声明为函数指针,指向采用 float 并返回 int 的函数——不涉及 typedef。但同样,没有任何语法允许您使用名称 myfunc 来执行此操作。

Yes, it is possible to declare a function pointer without a typedef, but no it is not possible to use the name of a function to do that.

The typedef is usually used because the syntax for declaring a function pointer is a bit baroque. However, the typedef is not required. You can write:

int (*ptr)(float); 

to declare ptr as a function pointer to a function taking float and returning int -- no typedef is involved. But again, there is no syntax that will allow you to use the name myfunc to do this.

薄荷港 2024-10-01 08:07:44

是否可以在不使用 typedef 的情况下使用预先声明的函数的类型作为函数指针?

当然,这并不是完全没有陷阱

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

f(&myfunc);

:它使用了函数,因此必须定义它,而诸如 decltype 之类的东西不使用函数并且不需要要定义的函数。

Is it posible to use the type of a prefiously declared function as a function pointer without using a typedef?

I'm going to cheat a bit

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

f(&myfunc);

Of course, this is not completely without pitfalls: It uses the function, so it must be defined, whereas such things as decltype do not use the function and do not require the function to be defined.

遥远的绿洲 2024-10-01 08:07:44

不,目前还不行。 C++0x 将更改 auto 的含义,并添加一个新的关键字 decltype,让您可以执行类似的操作。如果您使用 gcc/g++,您也可以考虑使用其 typeof 运算符,它非常相似(在处理引用时有细微的差别)。

No, not at the present time. C++0x will change the meaning of auto, and add a new keyword decltype that lets you do things like this. If you're using gcc/g++, you might also look into using its typeof operator, which is quite similar (has a subtle difference when dealing with references).

惟欲睡 2024-10-01 08:07:44

不,没有 C++0x decltype 就不行:

int myfunc(float)
{
  return 0;
}

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

No, not without C++0x decltype:

int myfunc(float)
{
  return 0;
}

int main ()
{
  decltype (myfunc) * ptr = myfunc;
}
过期以后 2024-10-01 08:07:44

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

gcc has typeof as an extension for C (don't know about C++) ( http://gcc.gnu.org/onlinedocs/gcc/Typeof.html ).

int myfunc(float);

int main(void) {
    typeof(myfunc) *ptrWithSameTypeAsMyFunc;
    ptrWithSameTypeAsMyFunc = NULL;
    return 0;
}
枉心 2024-10-01 08:07:44
int (*ptrWithSameTypeAsMyFunc)(float) = 0;  

有关基础知识的更多信息,请参阅此处

int (*ptrWithSameTypeAsMyFunc)(float) = 0;  

See here for more info on the basics.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文