我想知道在 C++ 中是否有可能通过将第 n 个参数的值设置为某个值(在运行时确定)来从带 n 个参数的函数中获取 (n-1) 个参数?
例如,我想做类似以下的事情:
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”读为“foo 下标 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)
. 沿着这些路线的任何东西都行得通吗?