gpt4 book ai didi

c++ - 为什么 bind() 应该被弃用?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:27:47 24 4
gpt4 key购买 nike

阅读 C++17 关于删除标准中一些已弃用的、旧的和未使用的部分的提案 ( http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4190.htm ),我发现 D.9 部分有点奇怪:

D.9 "Binders" [depr.lib.binders]

This defines bind1st()/bind2nd(), which were strictly superseded by bind().(In the future, I'll argue that bind() itself has been superseded by lambdasand especially generic lambdas, so bind() should be deprecated, but thatisn't part of this proposal.)

我没有得到有关 bind() 本身被 lambda 取代的评论。

如果我有一个类:

class A
{
public:
void f(int a){}
void f(int a, int b){}
}

我想将指向 A::f 的函数指针传递给某个函数 someFunction,以便该函数可以在从 实例化的对象上调用它>A,我声明someFunction:

void someFunction(const std::function<void(int, int)>&);

并称它为:

A a;
someFunction(std::bind(static_cast<void (A::*)(int, int)> (&A::f),
std::ref(a),
std::placeholders::_1,
std::placeholders::_2));

如何使用 lambda 实现相同的目的? bind() 真的没有什么是 lambda 做不到的吗?

最佳答案

你是怎么做到的?与使用 std::refplaceholders_ 的绑定(bind)示例相比,非常直接且不那么深奥(我的意见)。

#include <iostream>
#include <functional>

class A
{
public:
void f(int a) {}
void f(int a, int b) { std::cout << a + b << '\n';}
};

void someFunction(const std::function<void(int, int)>& f)
{
f(1, 2);
}

int main()
{
A a;
someFunction([&] (int x, int y) { a.f(x, y); });
return 0;
}

关于c++ - 为什么 bind() 应该被弃用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33835922/

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