c++中stdbind在带有参数(字符串)的函数中的用法

usage of std bind in c++ for functions with an argument (string)

本文关键字:字符串 函数 用法 参数 stdbind c++      更新时间:2023-10-16

我正试图在记录器类中创建一个std::函数向量。当我试图将一个方法绑定到我的std::函数时,比如:

NcursesWindow log_win("Logs",LINES-1,COLS/3,0,COLS*2/3);
std::function<void(std::string)> f = std::bind(&NcursesWindow::add_string,&log_win);

add_string函数的定义如下:

void add_string(string text);

然而,gcc(使用gfilt插件来尝试理解模板错误)返回:

BD Software STL Message Decryptor v3.10 for gcc 2/3/4
In file included from ./inc/ncursesui.h:6:0,
from src/ncursesui.cpp:1:
functional: In static member function ‘static void _Function_handler<
    void({basic_string<char>} ...), _Bind<
        _Mem_fn<void (NcursesWindow::*)(basic_string<char>)>(
            NcursesWindow)> 
>::_M_invoke(const _Any_data &, {basic_string<char>} ...)’:
[STL Decryptor: Suppressed 1 more STL standard header message]
src/ncursesui.cpp:32:86:   instantiated from here
functional:1778:2: erreur: no match for call to ‘(
    _Bind<
        _Mem_fn<void (NcursesWindow::*)(basic_string<char>)>(
            NcursesWindow)>) (basic_string<char>)’
STL Decryptor reminders:
Use the /hdr:L option to see all suppressed standard lib headers
Use the /cand:L option to see all suppressed template candidates

绑定调用中是否缺少string参数的占位符?

试试这个:

bind(&NcursesWindow::add_string,&log_win,std::placeholders::_1);

成员函数有两个参数:隐藏的this指针和std::string。您将第一个绑定到类的实例,另一个将保留,因此是占位符。