我想了解,爲什麼產量系列函數要求該類是默認可構造的?爲什麼範圍-V3產量需要默認構造函數
在以下示例中,僅當CNum具有默認構造函數時,vnums1行纔會編譯。 vnums2行不需要默認構造函數。
我正在使用Visual Studio 2017和Range-V3-VS2015。謝謝!
#include <range/v3/all.hpp>
struct CNum
{
// CNum() = default;
explicit CNum(int num) : m_num(num) {}
int m_num;
};
int main()
{
auto ints = ranges::view::ints(0, 10);
// this compiles only of CNum has a default constructor
auto vnums1 = ints
| ranges::view::for_each([](int num) { return ranges::yield_if(num % 2, CNum(num)); })
| ranges::to_vector;
// this compiles even if CNum does not have a default constructor
auto vnums2 = ints
| ranges::view::remove_if([](int num) { return num % 2 == 0; })
| ranges::view::transform([](int num) { return CNum(num); })
| ranges::to_vector;
return 0;
}
太好了。謝謝。 Microsoft/Range-V3-VS2015的維護人員沒有從ericniebler/range-v3中獲得新的更改。有沒有人對我如何才能獲得與VC++ 2017的最新工作有關的建議? – CodeAndLearn
不幸的是,您最好的選擇是分叉Microsoft/Range-V3-VS2015回購並自行進行更改。 –