Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在C++;_C++_Recursion_Decorator - Fatal编程技术网

C++ 如何在C++;

C++ 如何在C++;,c++,recursion,decorator,C++,Recursion,Decorator,我试图修饰一个非递归函数。但是对于递归函数,我找不到同样的方法。在C++中,现在是否可能? 我从一个简单的递归函数开始 uint64\u t fib(uint64\u t n) { if(n秒; } }; 但是这不起作用。递归总是发生。也许这不是向递归函数添加装饰器的方法。 < P>不能在C++中装饰递归函数。递归调用静态绑定到原始函数。 您可以装饰一个调用它期望的名称的可调用项 using fib_type = std::function<uint64_t(uint64_t)>;

我试图修饰一个非递归函数。但是对于递归函数,我找不到同样的方法。在C++中,现在是否可能?

我从一个简单的递归函数开始

uint64\u t fib(uint64\u t n)
{
if(n秒;
}
};

<>但是这不起作用。递归总是发生。也许这不是向递归函数添加装饰器的方法。

< P>不能在C++中装饰递归函数。递归调用静态绑定到原始函数。

您可以装饰一个调用它期望的名称的可调用项

using fib_type = std::function<uint64_t(uint64_t)>;

fib_type fib = [](uint64_t n)
{
    if (n <= 1)
        return n;
    return fib(n - 2) + fib(n - 1);
};

fib = memoized(fib);
使用fib_type=std::函数;
fib\u类型fib=[](uint64\u t n)
{

如果(n)“装饰”是什么意思这个术语在C++中没有一个普遍认可的意思。此外,请向我们展示你所尝试过的。意思是:应用一个装饰器。pattern@debashish.ghosh你是说python中的函数装饰器吗?也许是模板?看起来像decorators@debashish.ghosh经典的装饰器模式应用于类而不是函数。当然,其他语言中也有函数装饰器(是的,您可以在C++中模拟它们).所以,再一次,请告诉我们你尝试过什么。-也就是说,我猜你要找的是,例如Y组合子。你是对的。函数不是正确的实体。在调整装饰器以采用std::function后,它成功了。谢谢。