2012-06-28 24 views
0

在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; } 

,但我得到的錯誤:

Redefinition of func1 as different kind of symbol

+0

你試圖解決什麼問題?我強烈懷疑有一種實現你想要的簡單方法,但這取決於你的總體目標是什麼。 –

+0

您的問題可能在於您的代碼設計。發表真正的例子與評論什麼功能應該做的。 – Thomas

回答

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

你不能用typedefs來做你想做的事情,但是如果你確實想要做到這一點,你可以使用預處理器。

#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. 
相關問題