C 1x标准已弃用旧的STL绑定程序函数,而支持更通用的std :: bind.但是,似乎不推荐使用std :: not1和std :: not2来支持通用std :: not_或其他东西.现实是< functional>因为1)缺少lambdas,所以STL的一部分在C 1x之前是非常麻烦的,2)绑定器和否定函子需要嵌套的typedef argument_type,这意味着它们不能用于普通函数3)缺少可变参数模板需要单独的绑定和否定函数,具体取决于参数的数量.
C 1x改变了所有这一切,大大提高了< functional>的实用性.但由于某种原因,除了std :: not1和std :: not2之外,C 1x似乎已经改进了所有东西.真的,有一个标准的通用否定函数会很好,比如:
template <class F> class negation { public: negation(F f) : m_functor(f) { } template <class... Args> bool operator() (Args&&... args) const { return (!m_functor(args...)); } private: F m_functor; }; template <class F> inline negation<F> not_(F f) { return negation<F>(f); }
这当然会弃用std :: not1和std :: not2,就像旧的绑定器被弃用一样.
问题:1)我查看了C 1x草案,并没有看到任何提及通用否定函数.我错过了吗? 2)是否有一些令人信服的理由为什么他们添加了通用绑定并弃用旧绑定器,但是对于否定函数却没有做同样的事情?