用min_element增强信号
boost signal with min_element
我正在写一个小例子,试图理解boost::信号的多个返回值。然而,结果对我来说似乎很奇怪。
#include <boost/signal.hpp>
#include <iostream>
#include <algorithm>
int func1()
{
return 3;
}
int func2()
{
return 4;
}
int func3()
{
return 2;
}
template <typename T>
struct min_element
{
typedef T result_type; //result_type is required by boost::signal
template <typename InputIterator>
T operator()(InputIterator first, InputIterator last) const
{
std::cout<<*std::min_element(first, last)<<std::endl; //I got 3 here
return T(first, last);
}
};
int _tmain(int argc, _TCHAR* argv[])
{
boost::signal<int (), min_element<std::vector<int> > > s;
s.connect(func1);
s.connect(func2);
s.connect(func3);
std::vector<int> v = s();
std::cout<<*std::min_element(v.begin(),v.end())<<std::endl; //I got 2 here
return 0;
}
第一个min_element将输出"3",而第二个将输出"2"。显然,"2"是这三个数字中最小的。我不知道第一个有什么问题。在操作符()中,我还试图从第一个到最后迭代,我得到了序列"3,4,2",这似乎是正确的。但是为什么min_element会给我"3"呢?
代码是在VS2010 SP1下编译的。Boost的最新版本是1.46.1。
提前感谢。
迈克尔奇怪。替换operator()
:
T operator()(InputIterator first, InputIterator last) const
{
InputIterator result = first;
while (++first != last) {
// *result;
std::cout<<*first<<std::endl;
}
return T();
}
工作,但一旦你解除参考result
, first
和result
都被困在3。这就是std::min_element
正在做的;我找到了实现的源代码,并将其精简为你在上面看到的内容。
我不知道这是怎么回事。
相关文章:
- Qt VTK交互风格的信号到小部件
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 无法将结构注册为增强几何体3D点
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何在没有信号的情况下从C++执行QML插槽
- 线程之间的布尔停止信号
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 如何将增强MSM与增强信号结合使用?
- 括号内括号内的含义是什么,以获得增强信号
- 连接来自未知类的成员函数以增强信号
- 增强信号2 跟踪
- 增强信号槽概括
- 在地图中存储增强::信号2信号
- c++11 信号是否等同于增强信号
- 增强信号2破坏安全
- 增强信号:在类接口中公开信号本身或连接/断开方法
- 如何使C++增强::信号从封装发出它的物体的物体中捕获
- 增强线程和信号处理
- 用min_element增强信号
- C++具有不同参数的增强信号和插槽