C++ 将未知函数作为参数传递

标签 c++

我的问题如下,我有一个将一个函数作为参数的函数。问题是在某些情况下,传递的函数 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);
}

那么实现 Func 函数的正确方法是什么? 我也知道我做不到

Func(double (*fEval)(double F1),double min, double max,...)

Func(double (*fEval)(double F1,double F2),double min, double max,...)

谢谢!

好的,让我重新表述一下这个问题。我需要创建一个函数,它可以将一个未知函数作为第一个参数、两个不同的值和一个参数列表。 有点像

double Function(RandomFunction, val1, val2, ...);

随机函数将是:

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
}

我会尝试那种仿函数方式,但我不确定这样做是否正确?难道不需要我在可能调用的函数中重载 () 吗?

最佳答案

您可能应该需要一个重载了 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);
}

除此之外(除了传递可变参数函数之外,这不是很好,因为它不知道它是用一个还是两个参数调用)我认为没有另一种拥有函数的好方法可以接受 1 个或 2 个参数。

正如 ildjarn 在评论中提到的,您还可以将其设为模板,以便它可以采用任何类型的仿函数:

template<typename Functor_t>
void Func(Functor_t f, double min, double max, ...) {
    // same as above
}

关于C++ 将未知函数作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10403400/

相关文章:

C++组织实用程序代码,避免 "multiple definition of .."

c++ - 为系统托盘和 QAction (QT) 即时使用翻译

c++ - 播种随机数生成器 C++

c++ - 无法通过 cpp-netlib 发送发布请求

C++ 错误 "expression must be a modifiable lvalue "

c++ - 当您在 SDL2 中移动窗口时,如何解决程序卡住问题?

c++ - endl 和\n 与 fork() 的不同行为

c++ - C++线程库异常

c++ - 如何使用boost::unit_test 编写脚本来执行自动测试?

c++ - Keepalive 时间 - 在 C++ 中不能减少到一分钟以下