std::bind: error: too few arguments to function call, single argument was not specified
std::bind: error: too few arguments to function call, single argument was not specified
我有以下代码:
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()
。这意味着 "call create_msg
, take whatever result it produces, and pass that in as the first argument to std::bind
." 这不是你想要的 - 你的意思是 "take create_msg
and pass it as the first parameter to std::bind
." 因为 create_msg
是一个成员函数,你需要像这样得到一个指向它的指针:
std::bind(&MyClass::create_msg, /* ... */)
这将解决一个问题,但随后会弹出另一个问题。当您将 std::bind
与成员函数指针一起使用时,您需要证明 std::bind
具有与调用该成员函数时要使用的接收者对象对应的额外参数。我相信在你的情况下,你希望当前对象成为接收者,它看起来像这样:
std::bind(&MyClass::create_msg, this, timestamp)
那应该可以正常工作。
然而,有人可能会争辩说这里还有第三个问题 - 与其使用 std::bind
,不如使用 lambda 表达式?
[timestamp, this] { create_msg(timestamp); }
我有以下代码:
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()
。这意味着 "call create_msg
, take whatever result it produces, and pass that in as the first argument to std::bind
." 这不是你想要的 - 你的意思是 "take create_msg
and pass it as the first parameter to std::bind
." 因为 create_msg
是一个成员函数,你需要像这样得到一个指向它的指针:
std::bind(&MyClass::create_msg, /* ... */)
这将解决一个问题,但随后会弹出另一个问题。当您将 std::bind
与成员函数指针一起使用时,您需要证明 std::bind
具有与调用该成员函数时要使用的接收者对象对应的额外参数。我相信在你的情况下,你希望当前对象成为接收者,它看起来像这样:
std::bind(&MyClass::create_msg, this, timestamp)
那应该可以正常工作。
然而,有人可能会争辩说这里还有第三个问题 - 与其使用 std::bind
,不如使用 lambda 表达式?
[timestamp, this] { create_msg(timestamp); }