我想知道如果在C++中可以通過將第n個參數的值設置爲某個值(要在運行時確定)從一個帶n個參數的函數中獲取(n-1)個參數?是否可以通過將一個參數設置爲一個固定值來從n參數函數中獲取(n-1)-argument函數?
E.g.我想這樣做如下:
float foo(float a, float b, float c){
// do some stuff
}
float bar(float x, float y, float f(float q, float r)){
return f(x,y);
}
int main(){
double (*function)(float, float);
float some_value;
// somehow determine some_value, e.g. read from stdin.
// Now I would like to set function something along the lines of:
function = foo(. , . , some_value)
return bar(123, 456, function);
}
概念,foo
是函數的家人c
索引,即一個家庭的功能foo_c (float a, float b)
(讀「foo_c」爲「富標c」在這裏),和我想分別通過foo_c
指向它的指針作爲參數bar
。
這在C++中完全可能嗎? 據我所知,對於上面的函數指針來說這是不可能的。有沒有其他的方式來做這樣的事情?
我簡要地考慮做foo
一個函數模板,但我想設置它在運行時的第三個參數,這將無法正常工作。
顯而易見的解決方案當然是修改bar
以便將float f(float q, float r, float t)
作爲第三個參數,但這會使代碼重複使用少得多(並且看起來不那麼優雅)。我會想通過其他功能bar
爲好,其中一些只需要兩個參數,三個以上的,或不同類型的參數,這是我需要以某種方式將它們傳遞給bar
之前,設置成固定值。
我還沒有完全弄清楚,在這種情況下,我是否可以使bar
爲模板函數,沿着template <typename T, typename S> float bar(float x, float y, T f(float a, float b, S param), S parameters)
的行,然後使用類似bar <double *(float, float, float), float> (123, 456, function, parameters)
的方式調用它。沿着這些線會有什麼工作嗎?
對於你的Google-fu:這被稱爲*部分應用程序*,並且受到大多數現代編程語言的本機支持,特別是那些聲稱促進函數式編程的。 –
通過'std :: bind'部分應用。 –
順便說一下,'bar'的'f'參數是一個返回'float'的函數,但是您已經定義了函數指針'function'來返回'double'。 –