2016-12-03 105 views
1

我有多個具有不同參數數量的函數,例如,使用不同數量的參數調用函數

double foo(double x, double y) { return x + y; } 

double bar(double x, double y, double z) { return x + y + z; } 

double zoo(double x, double y) { return x * y; } 

我想用自己的名字以下列方式使用一些包羅萬象的函數來調用函數:

call_function("foo", x, y); 
call_function("bar", x, y, z); 

可以假定這兩個參數和函數返回具有相同的類型(例如,如上例中的double)。不幸的是,由於項目的複雜性,我無法改變我所調用的功能,我需要按照原樣處理它們。

有沒有簡單的解決方案呢?

+0

而第一個參數必須是這樣的字符串? – Martin

+1

你可以給他們相同的名字或者爲每個人寫封裝函數,並給封裝函數賦予相同的名字。編譯器將根據您指定的參數數量調用正確的一個。 – Galik

+0

@Martin這將是更可取的,因爲對我來說最簡單的就是能夠說「調用foo函數」而不會打擾其他任何事情。 – Tim

回答

2
#define CALL(fn, x, y) fn(x, y) 
#define CALL(fn, x, y, z) fn(x, y, z) 

允許你這樣做:

CALL(foo, 13, 6); 
CALL(bar, 1, 2, 3); 

這樣夠好?

0

我認爲你要找的是overloading,即聲明相同方法(同名)但具有不同參數數量的能力。

+2

你所描述的被稱爲超負荷,而不是什麼問題是關於我相信 – Martin

+0

你是對的,但在我看來,OP的意圖是做這樣的事情。但我可能是錯的。 – NiVeR

相關問題