gpt4 book ai didi

c++ - std::bind: 错误:函数调用的参数太少,未指定单个参数

转载 作者:行者123 更新时间:2023-11-30 02:17:14 25 4
gpt4 key购买 nike

我有以下代码:

void MyClass::create_msg(MyTime timestamp) {
// do things here ...
}

我尝试为上述函数创建一个 std::bind :

MyMsg MyClass::getResult(MyTime timestamp) {
// do things here ...
std::bind(create_msg(), timestamp);
// do things ...
}

但是出现如下错误:

error: too few arguments to function call, single argument 'timestamp' was not specified
std::bind(create_msg(), timestamp);
~~~~~~~~~~ ^
MyClass.cpp:381:1: note: 'create_msg' declared here
void MyClass::create_msg(MyTime timestamp) {
^
1 error generated.

在这种情况下我做错了什么?谢谢!

顺便说一句,如果我这样做,同样的错误:

std::bind(&MyClass::create_msg(), this, timestamp);

最佳答案

这里有三个问题。

首先,作为您的函数,您提供给 std::bind 的参数当前是 create_msg()。这意味着“调用 create_msg,获取它产生的任何结果,并将其作为第一个参数传递给 std::bind。”这不是您想要的 - 您的意思是“采用 create_msg 并将其作为第一个参数传递给 std::bind”。由于 create_msg 是一个成员函数,您需要像这样获取指向它的指针:

std::bind(&MyClass::create_msg, /* ... */)

这将解决一个问题,但随后会弹出另一个问题。当您将 std::bind 与成员函数指针一起使用时,您需要证明 std::bind 具有与调用该成员时要使用的接收方对象对应的额外参数功能。我相信在您的情况下,您希望当前对象成为接收者,它看起来像这样:

std::bind(&MyClass::create_msg, this, timestamp)

这应该可以正常工作。

但是,有人可能会争辩说这里还有第三个问题 - 为什么不使用 lambda 表达式而不是使用 std::bind

[timestamp, this] { create_msg(timestamp); }

关于c++ - std::bind: 错误:函数调用的参数太少,未指定单个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53876976/

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