6 ms·
Like offsetof[1]? [1] https://en.cppreference.com/w/cpp/types/offsetof https://en.cppreference.com/w/cpp/types/offsetof
by aozgaa 1y ago
Like offsetof[1]?
[1] https://en.cppreference.com/w/cpp/types/offsetof https://en.cppreference.com/w/cpp/types/offsetof
- T-R 1y agoOptics let you concisely describe the location, but defer the dereferencing, so you could definitely approximate optics, not by passing around pointers you compute with `offsetof`, but passing around functions that use `offsetof` to return memory locations to reference (read/write to). You could certainly write a composition operator for `*(*T) => List<*R>`... Some people have done something like it[1][2]: Account acc = getAccount(); QVERIFY(acc.person.address.house == 20); auto houseLens = personL() to addressL() to houseL(); std::function<int(int)> modifier = [](int old) { return old + 6; }; Account newAcc2 = over(houseLens, newAcc1, modifier); These also use templating to get something that still feels maybe a little less ergonomic than it could be, though. [1] https://github.com/graninas/cpp_lenses https://github.com/graninas/cpp_lenses [2] https://github.com/jonsterling/Lens.hpp https://github.com/jonsterling/Lens.hpp