Сообщение Re[46]: offsetof() без UB от 31.03.2025 21:48
Изменено 31.03.2025 22:00 rg45
Re[46]: offsetof() без UB
Здравствуйте, kov_serg, Вы писали:
_>Ну хз. Мне такие указатели гораздо удобнее чем то что в C++ нагородили
_>https://godbolt.org/z/Y7xMsE6qo
Мда уж. Демонстрация того, что даже самые простые вещи можно делать черз жопу.
Хотя, казалось бы, чего уж проще:
https://godbolt.org/z/qv4T51Wcr
_>Ну хз. Мне такие указатели гораздо удобнее чем то что в C++ нагородили

_>https://godbolt.org/z/Y7xMsE6qo
Оригинальный пример | |
| |
Мда уж. Демонстрация того, что даже самые простые вещи можно делать черз жопу.
Хотя, казалось бы, чего уж проще:
https://godbolt.org/z/qv4T51Wcr
#include <stdio.h>
template <auto member>
struct Accessor
{
constexpr decltype(auto) operator()(auto&& object) const {
return object.*member;
}
constexpr decltype(auto) operator()(auto&& object, auto&&...args) const {
return (object.*member)(args...);
}
};
template <auto member> constexpr Accessor<member> accessor;
struct A {
int x = 10;
virtual int fn(int y) { return x + y; }
};
int main() {
A a[1];
auto fn = accessor<&A::fn>;
auto x = accessor<&A::x>;
printf("x=%d fn(20)=%d\n", x(*a), fn(*a, 20));
}
Re[46]: offsetof() без UB
Здравствуйте, kov_serg, Вы писали:
_>Ну хз. Мне такие указатели гораздо удобнее чем то что в C++ нагородили
_>https://godbolt.org/z/Y7xMsE6qo
Мда уж. Демонстрация того, что даже самые простые вещи можно делать черeз жопу.
Хотя, казалось бы, чего уж проще:
https://godbolt.org/z/qv4T51Wcr
_>Ну хз. Мне такие указатели гораздо удобнее чем то что в C++ нагородили

_>https://godbolt.org/z/Y7xMsE6qo
Оригинальный пример | |
| |
Мда уж. Демонстрация того, что даже самые простые вещи можно делать черeз жопу.
Хотя, казалось бы, чего уж проще:
https://godbolt.org/z/qv4T51Wcr
#include <stdio.h>
template <auto member>
struct Accessor
{
constexpr decltype(auto) operator()(auto&& object) const {
return object.*member;
}
constexpr decltype(auto) operator()(auto&& object, auto&&...args) const {
return (object.*member)(args...);
}
};
template <auto member> constexpr Accessor<member> accessor;
struct A {
int x = 10;
virtual int fn(int y) { return x + y; }
};
int main() {
A a[1];
auto fn = accessor<&A::fn>;
auto x = accessor<&A::x>;
printf("x=%d fn(20)=%d\n", x(*a), fn(*a, 20));
}