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

你不能用 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 回答
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 回答