如果我試圖定義一個指針,重載函數過載的指針重載函數
void myprint(int);
void myprint(const char*);
void (*funpointer)(int) = myprint;
編譯器明白funpointer
應指向版本的myprint
匹配它的參數。相反,我想funpointer
也被重載。
我試着簡單地添加幾行像
void myprint(int);
void myprint(const char*);
void (*funpointer)(int);
void (*funpointer)(const char *);
void funpointer = myprint;
但隨後編譯器爲funpointer
(顯然)衝突的聲明的抱怨。
有沒有辦法實現我在找的東西?我希望指針表現爲重載函數。所以我可以將它稱爲funpointer(1)
或funpointer("Hey.")
,它可以作爲myprint
的相應版本。
如果main上面的decs在lib.h中,後面的代碼可以做到以下幾點: struct MYSTRUCT {double d; int x} void foo(MYSTRUCT m){printf(「mystruct \ n」); } ... MYSTRUCT ms = {3。14159,6}; foo(ms); foo(ms); 和lib會調用你的foo。 注意,使用這種技術,你必須非常小心隱式類型轉換 – kylben
抱歉,應該是callfoo(ms),那麼lib會回調你的foo(MYSTRUCT ms); – kylben
我這樣做的原因是'funpointer'在運行時在幾個函數之間交替。這些函數被重載以接受整數和字符,這就是我遇到的問題。我寧願不將這些重載函數分解爲常規函數(因爲這需要在其他地方更改大量代碼),但我認爲我必須遵循這一點。 – Malabarba