2012-02-09 8 views
5

私のロガークラスでstd :: functionsのベクトルを作成しようとしています。私は自分のSTDにメソッドをバインドしようとすると::そのような関数:引数(文字列)を持つ関数に対してstdバインドをC++で使用する

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); 

、理解しようとするgfiltアドオンとGCC(テンプレートエラー)を返します。

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 
+0

'add_string()'は 'NcursesWindows'のメンバ関数ですか? – liwp

+1

バインド・コールに欠落している文字列パラメータのプレースホルダはありませんか? boostでは、 'bind(&NcursesWindow :: add_string、&log_win、_1)'が必要です。 – nabulke

+0

はい、この関数のプロトタイプはNcursesWindowsのものです。 – Tuxer

答えて

9

は、あなたのバインド・コールで行方不明stringパラメータのプレースホルダはありませんか?

これを試してみてください:

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

メンバ関数は、2つのパラメータがあります。隠されたthisポインタとstd::stringを。最初のクラスをクラスのインスタンスにバインドし、もう1つは残ります。したがって、プレースホルダです。

関連する問題