【问题标题】:Function Pointers with Different Return Types C具有不同返回类型的函数指针 C
【发布时间】:2015-04-18 05:43:04
【问题描述】:

我了解 C 中的函数指针以及如何使用它们。但是,我不知道如何拥有一个可以指向具有不同返回类型的函数的函数指针。这可能吗?我知道如何使用函数指针数组,但我只找到了不同参数的示例,而不是返回类型。 (C: How can I use a single function pointer array for functions with variable parameter counts?) 如果数组更有意义,您能否提供一个示例说明如何执行此操作?

我有一个 switch/case 语句来选择将被指向的函数。然后将其作为参数传递给另一个函数。例如,我在下面列出了一些我需要实现的功能:

float* doFloatOps();
void goToSleep();
int* multiplication();

我需要有一个可以设置为指向其中任何一个的函数指针。我认为由于代码的设置,我只能有一个指针。如果您看到一种重组方法以使函数指向更容易,我将不胜感激。我的代码的当前结构是这样的:

switch(letter)
{
    case 'a':
    {
        functionPointer = &doFloatOps;
    }
    case 'b':
    {
        functionPointer = &goToSleep;
    }
     .......
}

void carryOutFunctions(functionPointer)
{
    while(....)
    {
        functionPointer;
    }
}

请原谅以上任何与函数指针问题无关的语法错误。

所以我的主要问题是:如何才能拥有一组具有不同返回类型的函数指针,或者使一个函数指针指向具有不同返回类型的函数?

【问题讨论】:

  • 您可能会考虑一个函数指针的联合,该联合具有每个不同返回类型的成员,然后为每种情况设置/使用适当的联合成员。不完全是你想要的,但这是我能想到的实现你想要的唯一方法。

标签: c pointers function-pointers


【解决方案1】:

这是不可能的,你不能有一个函数指针指向具有不同返回类型的函数,因为它们的类型不兼容。这种情况可以尝试返回void *,然后根据需要处理返回值。

当然,这需要您在处理返回的数据时非常小心。这种技术的一个例子是在pthreads 中,您将函数指针传递给pthread_create(),其类型为void (*)(void *)

在您的情况下,如果函数返回 void *,它应该可以工作,并记住 void * 可以转换为任何指针类型而无需强制转换。

当然,您也可以使用union 作为返回类型。

【讨论】:

  • iharob 和@epicbrew 谢谢!联合返回类型可以正常工作。
猜你喜欢
  • 2014-05-12
  • 2016-09-13
  • 1970-01-01
  • 1970-01-01
  • 2018-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多