为什么要弃用bind()?

时间:2015-11-20 20:55:26

标签: c++ lambda std-function stdbind

阅读关于C ++的提议17关于删除标准的一些已弃用的,旧的和未使用的部分(http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4190.htm)我发现D.9部分有点奇怪:

  

D.9“粘合剂”[depr.lib.binders]

     

这定义了bind1st()/ bind2nd(),它们被bind()严格取代。   (将来,我会争辩说bind()本身已经被lambda所取代   特别是通用的lambda,所以不应该弃用bind(),但是   不属于本提案的一部分。)

我没有得到关于bind()本身被lambdas取代的评论。

如果我有课:

class A
{
  public:
    void f(int a){}
    void f(int a, int b){}
}

我想将一个函数指针传递给A::f到某个函数someFunction,这样这个函数可以在A实例化的对象上调用它,我声明{{1 }}:

someFunction

并称之为:

void someFunction(const std::function<void(int, int)>&);

如何使用lambda实现相同的功能? A a; someFunction(std::bind(static_cast<void (A::*)(int, int)> (&A::f), std::ref(a), std::placeholders::_1, std::placeholders::_2)); 真的没有什么可以用lambda做的吗?

1 个答案:

答案 0 :(得分:7)

你是怎么做到的?与imap_expunge($mbox); int main(void){ SysCtlClockSet(SYSCTL_OSC_MAIN); //enable the hibernation module SysCtlPeripheralEnable(SYSCTL_PERIPH_HIBERNATE); //SYSCTL_OSC_EXT32 is the rate of the clock supplied to the Hibernation HibernateEnableExpClk(SYSCTL_OSC_EXT32); HibernateClockConfig(HIBERNATE_OSC_HIGHDRIVE); HibernateRTCDisable(); //set the value to 0 HibernateRTCSet(0); HibernateRTCEnable(); //get starting values unsigned long long sec = HibernateRTCGet(); unsigned int subsec = HibernateRTCSSGet(); while(1){ sec= HibernateRTCGet(); subsec=HibernateRTCSSGet() } } 的绑定示例相比,非常直接且不那么深奥(我的意见)。

std::ref