std::tuple, не инстанцируя его? Я ничего лучше этого не придумал https://pastebin.com/ZWgZrrZ9
Не инстанциируя то вообше невозможно..
Чейта?
Спасибо, это я сделал. Теперь интересно, как можно избавиться от аргумента? Для этого нужно переносить операцию в шаблонный параметр или можно и без этого?
Я думаю там все равно будет инстанциирование
Я имел в виду не создавая переменную, конечно 🙂
Так аргумент это функция куда будут передаваться указатели на типы, если ее убрать то как это должно работать?
Это шаблонная функция, и тип там виден без аргумента. Грубо говоря, сейчас у меня такой код: #include <tuple> #include <iostream> template<class Tuple, class Op> void for_each_type(Op &&f) { [&f]<class... Ts>(std::tuple<Ts...> *) { (f(static_cast<Ts *>(nullptr)), ...); }(static_cast<Tuple *>(nullptr)); } int main() { for_each_type<std::tuple<int, float, double>>([]<typename T>(T *) { std::cout << typeid(T).name() << "\n"; }); } и я хочу избавиться от ненужного "T *" в конце
template<class Tuple, class Op> void for_each_type(Op&& f) { [&f]<typename... Ts>(std::tuple<Ts...>*) { (f.template operator()<Ts>(), ...); }(static_cast<Tuple*>(nullptr)); }
Спасибо, то что надо, но этот вариант положил Apple clang 12.0 с segfault 🙂
может он не любит такой вариант вызова)
Обсуждают сегодня