2017-09-26 4 views
0

クラスメンバ関数に1つのパラメータをバインドする必要があります。このような 何か:std ::オブジェクトのないメンバー関数へのパラメータのバインド

#include <functional> 
#include <iostream> 

struct test 
{ 
    void func(int a, int b) 
    { 
     std::cout << a << " " << b << std::endl; 
    } 
}; 

int main(int argc, char** argv) 
{ 
    typedef void (test::*TFunc)(int); 
    TFunc func = std::bind(&test::func, 1, std::placeholders::_1); 
} 

しかし、この場合には、私が持っているコンパイルエラー

error: static assertion failed: Wrong number of arguments for pointer-to 
-member 
+1

おそらく 'std :: bind'によって生成されたオブジェクトが、プレーンなメンバ関数ポインタに変換可能であると期待するべきではありません。 – Quentin

+0

基本的にクラス定義の外にメンバー関数を定義する方法を探しているなら、これは単純にできません。クラスにオーバーロードを追加するか、フリー関数を定義することしかできません。 –

答えて

4

std::bindメンバ関数ポインタを得られませんが、それはあなたが後で使用できるstd::functionオブジェクトを生成することができます。

::std::function< void (test *, int)> func = std::bind(&test::func, std::placeholders::_1, 1, std::placeholders::_2); 
test t{}; 
func(&t, 2); 
+0

ありがとうございます、あなたの決断は私の要求と少し異なります。 – tenta4

+0

@ tenta4 'std :: bind'の戻り値の型は常に(ある)クラス型のオブジェクトです。それから、ポインタからメンバ関数への変換はありません。 1つは、バインドされた 'int'が行くところがどこにもありません。 – Caleth

関連する問題