Ich versuche zu verstehen, aus welchen Gründen benötigt die yield-Familie von Funktionen, dass die Klasse standardmäßig konstruierbar ist?Warum benötigt Range-v3 yield den Standardkonstruktor
Im folgenden Beispiel kompiliert die Zeile vnums1 nur, wenn CNum einen Standardkonstruktor hat. Die Zeile vnums2 benötigt keinen Standardkonstruktor.
Ich verwende Visual Studio 2017 und Range-V3-VS2015. Vielen Dank!
#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;
}
Das ist großartig. Vielen Dank. Betreuer von Microsoft/Range-V3-VS2015 übernehmen keine neuen Änderungen von ericniebler/range-v3. Hat jemand Vorschläge, wie ich die neuesten Bits mit VC++ 2017 arbeiten kann? – CodeAndLearn
Leider ist es am besten, wenn Sie den Microsoft/Range-V3-VS2015-Repo auslagern und die Änderungen selbst vornehmen. –