gpt4 book ai didi

c++ - 具有不同签名的绑定(bind)函数

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

如果有人问过这个问题,我深表歉意。

我以为你不能用不同的签名绑定(bind)函数,但看看这个:

void TakesChar(char parameter)
{
std::cout << parameter << std::endl;
}

using CallSig = void(float);
using CallBack = std::function<CallSig>;

int main()
{
CallBack callback = std::bind(&TakesChar, std::placeholders::_1);
callback(1.1f);
callback(2.2f);

return 0;
}

编译并运行。您可以尝试不同的参数类型和数量。例如,您可以修改 TakesChar,使其不带任何参数,但仍会编译。

这是为什么?这背后有什么道理吗?我可以强制签名完全匹配吗?

谢谢。

最佳答案

其实这里有两个问题:

  1. 为什么允许转换?
  2. 为什么不向 bind 提供参数? , 返回对象接受任意数量的参数 ?

前者只是决定bind的行为: 因为你可以打电话 TakesChar(1.1f)为什么不允许 std::bind(&TakesChar, _1)绑定(bind)到 std::function<void(float)> ?委员会决定允许它。

后者,如评论中所述,已在 SO 上得到解决。 .简而言之,它不仅更容易,而且还允许 bind具有多个 operator() 的对象不同的 arities。

关于c++ - 具有不同签名的绑定(bind)函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23390125/

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