c – 一元和二元否定

前端之家收集整理的这篇文章主要介绍了c – 一元和二元否定前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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)是否有一些令人信服的理由为什么他们添加了通用绑定并弃用旧绑定器,但是对于否定函数却没有做同样的事情?

解决方法

>你没有错过它.
>令人信服的理由?这取决于你问谁.讨论了缺乏此功能,但直到此过程很晚才开始.嗯……我现在找不到文书工作,可能没有.

对此(imho)的最佳解决方案是添加operator!()来绑定.但到了这个时候,委员会没有心情为C 11增加功能.也许它会出现在技术报告中.

哦,这是文书工作:

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3224.html#gb97

猜你在找的C&C++相关文章