gpt4 book ai didi

c++ - 一元和二元否定

转载 作者:可可西里 更新时间:2023-11-01 18:34:46 24 4
gpt4 key购买 nike

C++1x 标准弃用了旧的 STL 绑定(bind)器函数,支持更通用的 std::bind .但是,似乎 std::not1std::not2不反对通用 std::not_或者其他的东西。现实情况是 <functional>在 C++1x 之前,STL 的一部分使用起来真的很麻烦,因为 1) 缺少 lambda,2) 绑定(bind)器和否定仿函数需要嵌套的 typedef argument_type ,这意味着它们不能与普通函数一起使用,并且 3) 缺少可变参数模板需要根据参数的数量单独的绑定(bind)函数和否定函数。

C++1x 改变了这一切,显着提高了 <functional> 的实用性.但出于某种原因,C++1x 似乎改进了所有除了 std::not1std::not2 .真的,如果有一个标准的通用 negate 就好了功能,例如:

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::not1std::not2以同样的方式旧 Binder 被弃用。

问题: 1) 我查看了 C++1x 草案,没有看到任何关于通用 negate 的提及。功能。我错过了吗? 2)他们添加通用 bind 有什么令人信服的理由吗?并弃用了旧的 Binder ,但没有对否定功能做同样的事情?

最佳答案

  1. 您没有错过。

  2. 令人信服的理由?这取决于你问谁。讨论了缺少此功能,但直到过程的很晚才讨论。嗯...目前我找不到相关的文书工作,可能没有。

这个(恕我直言)的最佳解决方案是添加 operator!() 进行绑定(bind)。但是当这个问题出现时,委员会没有心情为 C++11 添加新功能。也许它会出现在技术报告中。

哦,这是文书工作:

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

关于c++ - 一元和二元否定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5567342/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com