gpt4 book ai didi

c++ - 递归 std::functional 与递归匿名命名空间函数。使用哪一个?

转载 作者:行者123 更新时间:2023-11-30 01:45:36 24 4
gpt4 key购买 nike

假设我的类有一个方法必须从其中调用其他递归方法。

我的 .h 文件看起来像这样:

class MyClass() 
{
public:
void foo();
};

我的问题是,这些实现中哪个更好(忽略无限循环):

namespace
{
void myRecursiveFunction()
{
myRecursiveFunction();
}
}
void MyClass::foo()
{
myRecursiveFunction();
}

void MyClass::foo()
{
std::function<void()> myRecursiveFunction =
[&] ()
{
myRecursiveFunction();
};

myRecursiveFunction();
}

,给出 myRecursiveFunction() 只会从 foo() 调用?

当然,在现实世界中 myRecursiveFunction() 一些事情。我只是不想用不需要的信息填充代码。

如果我只在一种方法中使用 myRecursiveFunction,我的所有类(class)都可以访问它吗?

最佳答案

std::function 优点:

  • 如果仅从该函数调用递归函数,那么它的作用域就会受到很好的限制。匿名命名空间对整个翻译单元可见。该函数对翻译单元的其余部分可见是可以的,因此可以说这只是一个微小的优势。

std::function 缺点:

  • 简单函数的语法比 lambda 更简单。
  • std::function 可能有 some small overhead .
  • 如果您在 foo 中定义了 std::function,则递归函数在其外部不可重用。如果它无论如何都不可重复使用,那很好。
  • 不适用于 c++11 之前的标准。

哪个更好取决于你需要什么和你喜欢什么。在大多数情况下,我更喜欢简单的功能。

关于c++ - 递归 std::functional 与递归匿名命名空间函数。使用哪一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34392515/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com