68

文字を受け取り、その文字に応じて関数へのポインターを返す関数を作成しようとしています。関数が関数へのポインタを返すようにする方法がわかりません。

4

14 に答える 14

103
int f(char) {
    return 0;
}

int (*return_f())(char) {
    return f;
}

いいえ、真剣に、typedefを使用してください:)

于 2009-06-15T19:26:34.487 に答える
73
#include <iostream>
using namespace std;

int f1() {
    return 1;
}

int f2() {
    return 2;
}

typedef int (*fptr)();


fptr f( char c ) {
    if ( c == '1' ) {
        return f1;
    }
    else {
        return f2;
    }
}

int main() {
    char c = '1';
    fptr fp = f( c );
    cout << fp() << endl;
}
于 2009-06-15T19:15:28.660 に答える
20

関数シグネチャの typedef を作成します。

typedef void (* FuncSig)(int param);

次に、FuncSig を返すように関数を宣言します。

FuncSig GetFunction();
于 2009-06-15T19:15:06.303 に答える
4
typedef void (*voidFn)();

void foo()
{
}

voidFn goo(char c)
{
    if (c == 'f') {
        return foo;
    }
    else {
        //..
    }
    // ..
}
于 2009-06-15T19:15:21.000 に答える
2

このサイトをチェックしてください - http://cdecl.org

英語を C 宣言に変換したり、逆に変換したりするのに役立ちます!

クール!

このリンクは、erikallen の回答の例をデコードします。 int (*return_f())(char)

于 2013-09-02T01:38:47.033 に答える
2

これは、関数ポインタの戻りを示すコードです。最初に返す「関数シグネチャ」を定義する必要があります。

int returnsOne() {
     return 1;
}

typedef int(*fp)();

fp returnsFPtoReturnsOne() {
    &returnsOne;
}

あなたの特定のケースでは:

fp getFunctionFor(char code) {
    switch (code) {
        case 'a': return &functionA;
        case 'b': return &functionB;
    }
    return NULL;
}
于 2009-06-15T19:13:45.077 に答える
1

最も簡単な方法は、必要な関数へのポインター型を typedef し、それを使用することです

typedef void (*fnptr_t)(int, int);
fptr_t myfunc(char *) { ....
于 2009-06-15T19:16:03.620 に答える
1

私はオブジェクトを返すことを好み、operator() を呼び出します。このようにして、関数はインターフェイスを返すことができ、すべてのクラスはこれから継承できます。つまり、C ではなく C++ を使用している場合です。

次に、パラメーター化された factor メソッドを使用して、入力に基づいてオブジェクトを返すことができます。

于 2009-06-15T19:17:30.013 に答える
0

ここでは C を想定しています (オブジェクトなし) :) :

// Type of function which takes a char and returns an int:
typedef int (*Func)(char a);

// An example of the function you're trying to return and which does something
// with char:
int exampleFunc(char a)
{
    return (int)(a + 42);
}

// The function returning the pointer to a function:
Func *returnAfunc(void)
{
    return exampleFunc;
}
于 2009-06-15T19:15:15.837 に答える
0

このようなもの

#include <iostream>

typedef char (*fn_ptr_t)(char);

char a_fn(char c)
{
  return c + 1;
}

char b_fn(char c)
{
  return c + 2;
}

fn_ptr_t
return_function(char c)
{
  fn_ptr_t result = 0;

  switch (c)
 {
    case 'a':
      result = a_fn;
      break;
    case 'b':
      result = b_fn;
      break;
 }

 return result;
}

int
main()
{
  fn_ptr_t fn = return_function('a');

  std::cout << "a(l) = " << (fn)('l') << std::endl;

  return 0;
}
于 2009-06-15T19:21:18.493 に答える