如何才能boost::bind()
模板函數?boost :: bind()帶模板函數
我想要這段代碼(受boost::bind
bind_as_compose.cpp
例子的啓發)編譯和運行。請注意,評估與bind_as_compose.cpp
示例中的不同。 fff()
開始運行前kkk()
:
template<class F>
void fff(F fun)
{
std::cout << "fff(";
fun();
std::cout << ")";
}
void kkk()
{
std::cout << "kkk()";
}
void test()
{
fff(kkk); // "Regular" call - OK
// bind(fff,kkk)(); // Call via bind: Does not compile!!!
}
要打印:
fff(kkk())
fff(kkk())
更新: 基於this answer,我得到這個工作:
然而,這要求我明確指定th Ë實例類型,哪種擊敗目的...
更新2 最後,我想綁定的對象傳遞作爲一個無參調用類型的參數一樣fff()
其他功能。在這種情況下,什麼是顯式類型?
說我有另一個模板函數ggg()
:
template<class F>
void ggg(F fun)
{
std::cout << "ggg(";
fun();
std::cout << ")";
}
如何使用綁定得到這個輸出:fff(ggg(kkk()))
?
這似乎並不工作:
boost::bind(fff<void()>, boost::bind(ggg<void()>, kkk))();
'bind(&fff,&kkk)'? – Rapptz
@Rapptz:'bind(&fff,&kkk)'也不起作用。 –
您必須顯式傳遞模板參數,如boost :: bind(foo,args)。你可以檢查相關的鏈接,可能有相當多的愚蠢。 –
inf