class father
{
public:
virtual void ff(int j) = 0;
};
class child: public father
{
public:
virtual void ff(int i)
{
printf("in aaaa %d\n", i);
}
virtual ~child() {};
};
using CbStrongPtr = std::shared_ptr<fathter>;
using Cls = std::function<void(CbStrongPtr)>;
void fireNotification(Cls cls)
{
child m;
auto ccc = make_shared<child>(m);
auto aaa = dynamic_pointer_cast<father>(ccc);
// 类指针当参数就能替代那种bind带对象的用法?
cls(aaa);
}
int main()
{
// 这个bind怎么没带对象。
fireNotification(bind(&father::ff, placeholders::_1, 1));
return 0;
}
这里的bind绑定成员函数,没传成员实例的地址,在外面就会报错,当函数参数就不会
cls调用的时候,用子类实例指针当参数,就能调到bind的函数了?然后哪里转成了一般的bind调用?就是这种网上都能看到的用法
child cc;
bind(&father::ff, cc, placeholders::_1, 1)
对于bind的用法,没找到哪个说明了用法是绑定成员函数又不带对象的。网上能找到的都是上面那种带了cc的绑定。不带的这个用法的名称是什么?我好再搜搜。
难道是bind带对象的那种就是标准库里用functional做的封装?只是这个拿到外面来了?
--
FROM 64.104.125.*