2
我有綁定參數功能的問題。調用者類調用函數,它不知道參數。所以我不能像結合使用佔位符:綁定參數
v.invoke(boost::bind(&B::fun, this, _1));
我想讓這樣的事情:
v.invoke(boost::bind(&B::fun, this, fun_p));
我需要它,因爲我想通過功能A::fun
到B::BFun
。 B::BFun
不應直接撥打A::fun
,而應使用B::fun
。
class A
{
public:
A(){}
void fun(){
std::wcout << "FunA" << std::endl;
}
};
class Invoker
{
public:
Invoker(){}
template <typename Handler>
void invoke(Handler f)
{
f();
}
};
class B
{
public:
B(){}
template <typename Handler>
void BFun(Handler fun_p)
{
Invoker v;
v.invoke(boost::bind(&B::fun, this, fun_p)); <------- how to pass param. Not placeholder
}
template <typename Handler>
void fun(Handler func)
{
func();
std::wcout << "FunB" << std::endl;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
A a;
B b;
b.BFun(boost::bind(&A::fun, &a));
return 0;
}
不錯。我的例子很難理解這一點。但是,謝謝。我認爲它不那麼複雜。 – userbb 2011-04-30 16:24:01
我不明白問題1.功能組成在哪裏? – userbb 2011-04-30 16:57:00
@userbb:'main'用'bind(&A :: fun,&a)'作爲參數'fun_p'調用'BFun'。因此,直接將它替換爲'BFun',你會發現'BFun'內的表達式等同於'bind(&B :: fun,this,bind(&A :: fun,&a))'。這是綁定嵌套,被實現視爲特殊情況。 – ybungalobill 2011-04-30 17:02:00