0

C++ では、次のヘッダー ファイルがあるとします。

class Foo {
  static int func0 (int, int);
  static int func1 (int, int);
  static int func2 (int, int);
  static int func3 (int, int);
};

とにかくtypedefsを介してこれを行うことはありますか?

私は試した:

class Foo {
  typedef int(*func)(int, int);
  static func func1;
  static func func2;
  static func func3;
  static func func4;
};

そして、cppファイルで

int Foo::func1(int a, int b) { return a + b; }

しかし、私はエラーが発生します:

異なる種類のシンボルとしての func1 の再定義

4

2 に答える 2

1

func1定義しようとしている関数としてではなく、関数ポインタとして宣言されています。

関数ポインタの使用例:

typedef int (*func_t)(int, int);

int func1(int a, int b) { return a + b; }
int func2(int a, int b) { return a * b; }

funct_t op = func1;
assert(9 == op(4, 5));

op = func2;
assert(20 == op(4, 5));

そうは言っても、あなたの正確な意図が何であるかはわかりません。

于 2012-06-28T09:04:06.823 に答える
1

typedef でやりたいことはできませんが、本当にやりたい場合は、プリプロセッサを使用できます。

#define MAKE_MY_FUNC(funcname) static int funcname(int, int)

class Foo {
  MAKE_MY_FUNC(func0);
  MAKE_MY_FUNC(func1);
  MAKE_MY_FUNC(func2);
  MAKE_MY_FUNC(func3);
};

#undef MAKE_MY_FUNC  // To make sure that you don't get preprocessor misery afterwards.
于 2012-06-28T09:16:13.027 に答える