1
我在寫一個小例子來試圖理解boost :: signal的多個返回值。但是,結果似乎讓我感到厭煩。用min_element提升信號
#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。
在此先感謝。
邁克爾