Como posso mapear dados de estrutura aninhados com std::views::transform
?
No código abaixo, a transformação as_v1
funciona perfeitamente e permite copiar os dados.
Como posso fazer o mesmo para os dados na estrutura aninhada NS?
#include <algorithm>
#include <iostream>
#include <ranges>
#include <vector>
struct S
{
float v1;
float v2;
struct SN {
float v3;
};
SN sn;
};
int main() {
std::vector<S> aos{ { 1.0f, 2.0f, { 3.0f } } };
std::vector<float> soa(aos.size());
// Would work just fine for the:
// auto as_v1 = aos | std::views::transform(&S::v1);
// How could I manage a nested structure's member:
// This, of course, doesn't compile because of types inconsistency
auto as_v3 = aos | std::views::transform(offsetof(S, sn.v3));
std::ranges::copy(as_v3, soa.begin());
std::cout << "soa value:" << soa[0] << std::endl;
}
Entendo que S::SN::v3 não funcionará, pois precisamos do deslocamento do membro e ele será relativo ao sn
objeto, e parece que isso offsetof
deve resolver o problema, mas não consigo descobrir como fazer a conversão de tipos.
É possível?
Você está tentando acessar o membro de um membro.
Isso vai resolver.
Você pode usar lambda regular:
Demonstração