我怎样才能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())
更新: 基于这个答案,我得到了这个工作:
void (&fff_ptr)(void(void)) = fff;
boost::bind(fff_ptr, kkk)();
但是,这需要我明确指定实例化类型,哪种类型可以达到目的......
更新 2
最终,我想将绑定对象作为空值可调用类型参数传递给另一个函数,例如fff()
. 在这种情况下,显式类型是什么?
假设我有另一个模板功能ggg()
:
template<class F>
void ggg(F fun)
{
std::cout << "ggg(";
fun();
std::cout << ")";
}
我如何使用 bind 来获得这个输出:fff(ggg(kkk()))
?
这似乎不起作用:
boost::bind(fff<void()>, boost::bind(ggg<void()>, kkk))();