std::bind: error: слишком мало аргументов для вызова функции, один аргумент не указан
У меня есть следующий код:
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);
1 ответ
Здесь есть три вопроса.
Во-первых, аргумент, который вы даете 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)
Это должно работать правильно.
Однако можно утверждать, что здесь есть третья проблема, а не использование std::bind
почему бы просто не использовать лямбда-выражение?
[timestamp, this] { create_msg(timestamp); }