- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
#include <stddef.h>
#include <stdio.h>
#include <utility>
#define PLACEHOLDER char x[0];
#define FORCEINLINE
template <typename T, typename... Ts> struct MyTuple : MyTuple<Ts...>
{
FORCEINLINE constexpr MyTuple(T&& t, Ts&&... ts)
: value(std::move(t))
, MyTuple<Ts...> (std::forward<Ts>(ts)...){}
FORCEINLINE explicit MyTuple(const MyTuple<T,Ts...> &other) = default;
FORCEINLINE MyTuple(MyTuple<T,Ts...> &&other)
: MyTuple<Ts...>(std::forward<MyTuple<Ts...>>(other)),
value(std::move(other.value)){}
FORCEINLINE constexpr int size() const { return 1 + MyTuple<Ts...>::size(); }
constexpr static int sz = 1 + MyTuple<Ts...>::sz;
FORCEINLINE MyTuple<Ts...> &next(){return *static_cast<MyTuple<Ts...>*>(this);}
using tnext = MyTuple<Ts...>;
T value;
FORCEINLINE ~MyTuple() {}
constexpr static bool isitem = false;
};
struct MyTupleEmpty
{
PLACEHOLDER
FORCEINLINE constexpr int size() const { return 0; }
static constexpr int sz = 0;
~MyTupleEmpty() {}
constexpr static bool isitem = false;
};
template <typename T> struct MyTuple<T> {
FORCEINLINE MyTuple(T&& t) : value(std::move(t)){}
FORCEINLINE explicit MyTuple(const MyTuple<T> &other) = default;
FORCEINLINE MyTuple(MyTuple<T> &&other): value(std::move(other.value)){}
FORCEINLINE MyTupleEmpty &next() const{
static MyTupleEmpty empty;
return empty;
}
FORCEINLINE constexpr int size() const { return 1; }
constexpr static int sz = 1;
using tnext =MyTupleEmpty;
T value;
FORCEINLINE ~MyTuple() {}
constexpr static bool isitem = false;
};
template <class T>struct unwrap_refwrapper{using type = T;};
template <class T>struct unwrap_refwrapper<std::reference_wrapper<T>>{using type = T&;};
template <class T> using unwrap_decay_t = typename unwrap_refwrapper<typename std::decay<T>::type>::type;
template<typename... Ts>
static FORCEINLINE MyTuple<unwrap_decay_t<Ts>...> MakeTuple(Ts&&... args)
{
return MyTuple<unwrap_decay_t<Ts>...>(std::forward<Ts>(args)...);
}
struct i3{
auto setProp(auto x, i3 t = *(i3*)0)
{
typename decltype(x(*this))::tp c;
return c;
}
using tp = i3;
};
#define s(x,y) setProp([](auto c){struct xxx: decltype(c)::tp{decltype(y) x = y;using tp = xxx; decltype([] (auto xx, xxx &t = *(xxx*)0)\
{\
typename decltype(xx(t))::tp c;\
return c;\
}) setProp;auto BeginChildren(){return *this;}} d;return d;})
#define c(...) BeginChildren(),MakeTuple(__VA_ARGS__)
#define i(...) i3()
void func2()
{
auto tp = MakeTuple(
i(Window)
.s(width,10)
.s(height,20)
.c(
i(Item),
i(Item2)
.s(property1,10.0f)
)
);
printf("%d %d %f\n",tp.value.height,tp.value.width, tp.next().value.next().value.property1);
}
int main()
{
func2();
}
3.14159265 09.08.2022 22:15 # 0
Только от крестобляства глаза болят. Это бы на Сишку портануть. Но боюсь тогда тупизация может потеряться.
> decltype
В Сишечке это typeof.
3.14159265 09.08.2022 22:26 # 0
Правда и тут её тоже нету.
Такое компилится и работает.
mittorn 10.08.2022 16:46 # 0
Soul_re@ver 09.08.2022 22:30 # −1
тогда глаза будут болеть от макроёбства
эскобар.жпг
3.14159265 09.08.2022 22:54 # 0
На скорую руку портанул key-val часть на Си:
а) Убрал питушарские tp.value.height
б) Window никак не использовалось. Теперь это тип.
в) оптимизировал ненужные лямбды и бройлерплейт
г) typeof обещают завезти в новом Стандарте ™
д) теперь при дублях полей компилятор выдаст ошибку:
<source>:16:11: error: duplicate member 'bagor'
16 | F(bagor,"asdasd") \
https://godbolt.org/z/3jnTW4691
PS Минус не мой.
guest6 09.08.2022 22:58 # 0
3.14159265 09.08.2022 22:59 # −1
nyTuH_nugop_pidor 09.08.2022 23:54 # 0
3.14159265 10.08.2022 00:07 # 0
Как только тебя уличили во вранье, ты сразу слился с той ветки.
guest6 10.08.2022 00:19 # 0
guest6 10.08.2022 08:46 # 0
Desktop 20.08.2022 00:07 # 0
3.14159265 20.08.2022 00:15 # 0
Но не баззвордами из дискурса «рус-ня дрис-ня».
Чем опроверг необоснованные нападки на другого юзера.
https://govnokod.ru/28324#comment785171
Впрочем лалка уже слилась:
> Я не обязан в очередной раз что-то доказывать
Desktop 20.08.2022 00:18 # 0
это ж иньо крестовые походы собирает?
3.14159265 20.08.2022 00:30 # 0
Потому вопрос не по адресу. Тут я совершенно некомпетентен.
Стоило мне раз посмеяться, он немедленно бомбанул и начал бегать за мной по всем тредам.
guest6 09.08.2022 23:04 # 0
в сишечке? не в гцц?
3.14159265 09.08.2022 23:08 # 0
nyTuH_nugop_pidor 09.08.2022 23:56 # 0
guest6_uebok 09.08.2022 22:20 # 0
И на первый взгляд как-будто не видна.
Если кто-то кое-где у нас порой
Сишачку учить не хочет - то с такими нам вести неравный бой
Так написано судьбой для нас с тобой, для нас с тобой.