I have a piece of c++11 code similar like below:
switch(var) {
case 1: dosomething(std::get<1>(tuple));
case 2: dosomething(std::get<2>(tup
No need to get all cray cray in c++17.
template
inline void runtime_get(Func func, Tuple& tup, size_t idx) {
if (N == idx) {
std::invoke(func, std::get(tup));
return;
}
if constexpr (N + 1 < std::tuple_size_v) {
return runtime_get(func, tup, idx);
}
}
And runtime tuple_element
for fun.
// Returns a pointer to the type, so the element is not initialized.
template
inline void runtime_tuple_element(Func func, size_t idx) {
if (N == idx) {
std::tuple_element_t* ptr = nullptr;
std::invoke(func, ptr);
return;
}
if constexpr (N + 1 < std::tuple_size_v) {
return runtime_tuple_element(func, idx);
}
}