我的问题是,我有一个函数,它将一个函数作为参数.问题是在某些情况下,传递的函数fEval()需要使用两个参数而不是一个作为fEval(somevalue1,somevalue2)来调用
Func(double (*fEval)(double F1),double min, double max,...)
{
double value1 = fEval(10);
// do something here
double value2 = fEval(20,30);
}
Run Code Online (Sandbox Code Playgroud)
那么实现Func函数的正确方法是什么?我知道我也做不到
Func(double (*fEval)(double F1),double min, double max,...)
Run Code Online (Sandbox Code Playgroud)
要么
Func(double (*fEval)(double F1,double F2),double min, double max,...)
Run Code Online (Sandbox Code Playgroud)
谢谢 !
好吧,让我重新解释一下这个问题.我需要创建一个函数,它可以将一个未知函数作为第一个参数,两个不同的值和一个参数列表.就像是
double Function(RandomFunction, val1, val2, ...);
Run Code Online (Sandbox Code Playgroud)
随机函数将是:
double Func1(double x)
{
m_x = x;
//Calling function
// Set other things
}
double Func2(double x,double y)
{
m_y = y;
m_x = x;
//Calling function
// Set other things
}
Run Code Online (Sandbox Code Playgroud)
我会尝试这种仿函数方式,但我不确定这是不是正确的方法呢?难道它不需要我在可能的函数内部重载()可以调用吗?
您可能需要一个operator()重载的仿函数来获取一个或两个参数:
struct Functor {
double operator()(double d) {
....
}
double operator()(double d1, double d2) {
....
}
};
void Func(Functor f, double min, double max, ...) {
double value1 = f(10);
// do something here
double value2 = f(20, 30);
}
Run Code Online (Sandbox Code Playgroud)
除此之外(除了传递可变函数,这不会很好,因为它无法知道它是否被一个或两个参数调用)我不认为还有另一个好的方法来获得一个可以采取的函数1或2个参数.
正如评论中提到的ildjarn,您也可以将其作为模板,以便它可以采用任何类型的仿函数:
template<typename Functor_t>
void Func(Functor_t f, double min, double max, ...) {
// same as above
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
191 次 |
| 最近记录: |