c++ - 函数指针的现代 C++ 替代品

标签 c++ pointers c++11 function-pointers

到目前为止我一直在使用函数指针,就像 c++ 中的这种格式。我现在确实有一些用途,我想知道 c++11/14 中是否引入了其他任何替代方案。

#include <iostream>
using namespace std;

void sayHello();
void someFunction(void f());

int main() {

    someFunction(sayHello);
    return 0;
}
void sayHello(){
    std::cout<<"\n Hello World";
}
void someFunction(void f()){
    f();
} 

我确实看过这个question但无法理解与传统使用函数指针相比​​有什么优势。另外我想问一下,使用函数指针有什么问题(不推荐)吗,因为我从未见过有人使用它们。或任何其他替代礼物。

最佳答案

你提到的问题建议 std::function 但没有强调(或根本没有提到)它与 std::bind 结合时的值(value)。

你的例子是最简单的,但假设你有一个

std::function<void (int, int)> f ;

函数指针可以做或多或少相同的事情。但是假设你需要一个函数 g(int),它是 f,第二个参数绑定(bind)到 0。使用函数指针你不能做太多,使用 std::function 你可以这样做:

std::function<void(int)> g = std::bind(f, _1, 0) ;

关于c++ - 函数指针的现代 C++ 替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30748919/

相关文章:

c++ - 在 Windows 10 VS2015 上构建 Boost - 无法打开 *.lib

c++ - 从函数的可变参数构建特定的元组

c++ - C++中各种类型的任意嵌套可迭代实现的求和函数

c++ - 毫无异常(exception)地编写 C++ 吗?

c - 使用 realloc 动态扩展数组

c - 如何初始化指向堆栈的指针

c++ - 将 rng 的列表存储在 std::array 中以进行多线程处理

c++ - 模板化构造函数的专用模板不会被调用

c++ - DirectX透明纹理-使植物看起来不错

c - 为什么要执行跳转指令呢?