2012-12-21 74 views
4

是有可能有一个std::function返回std::function并使用递归与其他的std ::功能的各种功能,说一个函数的功能?换句话说,我想将一组函数合并成一个函数。嵌套的std ::功能

例如要关闭的基本教程

double genFunc(double x, std::function<double (double x)>f) 
{ 
    double res = f(x); 
    return res; 
} 

double square(double x){ 
    return x * x; 
} 

double dbl_sq(double x){ 
    return square(x * x); 
} 

我怎么能修改此允许嵌套std::function<std::function>电话?

+6

我觉得你的问题得到了接近底部切断。 – yiding

+1

当然...例如:'的std ::函数 bindVal(标准::函数女,int v)按{返回[=] {返回F(V);}; } ......你有什么问题? – Mankarse

回答

2

我不是很确定你是问什么,但我会在它采取刺伤。

所以,你要的是嵌套在一个std::function,但调用所有元素的一个电话吗?这将意味着你可以做几件事情,但最简单的是,这样的事情:

std::function<double(double)> nest(const std::function<double(double)> functions[], const int count) { 
    if (count == 1) { 
     return functions[0]; 
    } 

    return [=](double input) { 
     return nest(functions + 1, count - 1)(functions[0](input)); 
    }; 
} 

int main() 
{ 
    static const auto sq = [](double input) { 
     return input * input; 
    }; 

    static const auto dbl_sq = [](double input) { 
     return sq(input * input); 
    }; 

    static const auto dbl = [](double input) { 
     return input * 2; 
    }; 

    static const std::function<double(double)> sqrt = ::sqrt; 

    // now lets construct a 'nested lambda' 
    static const std::function<double(double)> funcs[] = { 
     sq, dbl, sqrt 
    }; 

    static const std::function<double(double)> func = nest(funcs, 3); 

    std::cout << func(4) << std::endl; // 5.65685 
    std::cout << ::sqrt((4 * 4) * 2) << std::endl; // 5.65685 
} 

它只是“崩溃”的功能的阵列成一个单一的功能。

如果这不是你要求什么,那么请编辑您原来的问题,使之更加明确要完成什么。