了解以下cpp片段

时间:2016-01-10 06:17:44

标签: c++ multithreading boost bitcoin

此代码段取自比特币代码库。

struct CombinerAll
{
    typedef bool result_type;

    template<typename I>
    bool operator()(I first, I last) const
    {
        while (first != last) {
            if (!(*first)) return false;
            ++first;
        }
        return true;
    }
};

这在这里使用

boost::signals2::signal<bool (CNode*), CombinerAll> ProcessMessages;

任何c ++专家都能帮我理解上面的内容(CombinerAllProcessMessages提升信号)吗?问这个因为升级库对我来说非常不直观。

1 个答案:

答案 0 :(得分:2)

从功能:

        if (!(*first)) return false;

如果取消引用指针/迭代器/对象,[first, last)范围内的任何元素求值为false,则该函数返回false。否则,它返回true

示例测试代码:

int main()
{
   std::string sa = "abc";

   std::vector<int> va = {1, 1, 1};
   std::vector<int> vb = {1, 0, 2};

   std::cout << std::boolalpha;
   std::cout << CombinerAll()(sa.begin(), sa.end()) << std::endl;

   std::cout << CombinerAll()(va.begin(), va.end()) << std::endl;
   std::cout << CombinerAll()(vb.begin(), vb.end()) << std::endl;

   return 0;
}

输出:

true
true
false

boost::signals2::signal的文档可在Boost website找到。

至于ProcessMessages的作用,你必须咨询编写该代码的人。