在C ++中,假设我有以下头文件:
class Foo {
static int func0 (int, int);
static int func1 (int, int);
static int func2 (int, int);
static int func3 (int, int);
};
无论如何通过typedef做到这一点?
我试过了:
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重新定义为不同类型的符号
答案 0 :(得分: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));
话虽如此,我不确定你的确切意图是什么。
答案 1 :(得分: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.