const auto& [a,b,c,d,e] = value;
return /* ??? */;
}
Что надо написать, вместо знаков вопросов, чтобы вернуть кортеж из member pointers на поля T, и чтобы работало для любого T из 5ти полей?
То есть нужно вернуть std::tuple{&T::field1,&T::field2, &T::field3, &T::field4, &T::field5 }; но имена полей мы не знаем.
P.S.: Если задача решаемая без reinterpret_cast - мы получим полноценную рефлексию имён полей аггрегатов в C++17
Отвечу вопросом на вопрос - появился способ вытягивать имя поля по его member pointer? Неужели опять трюки с __FUNCTION__? Хотя даже в этом случае явно не хватает constexpr в условии задачи
Да. Да. Да, но я надеялся его прифигачить как-нибудь сам (есть указание на отсутствие reinterpret_cast) https://godbolt.org/z/jx97n9
а вот так? https://godbolt.org/z/41ffqM наверное, не все так просто, но вдруг) Только там все равно const остается, не знаю, законно ли добавить еще remove_const
У тебя не members pointers
я понял, что хотелось
можно было бы смаячить свой std::tuple_element, где будет как раз-таки ::type и ::member для каждого индекса имплементирован, однако это нужно писать дополнительные специализации.
кажется int * никак не разбить на int T::* + this
Вот пишу я такой код: struct S { int i; }; S s; int * p = &s.i; S * thiz = &s; constexpr int T::* pm = f(thiz, p); в последней строке должно быть можно написать эквивалентный код f<thiz, p> (где f — некоторый alias template). Но ни thiz, ни p не могут быть параметрами constexpr.
Обсуждают сегодня