в следующем коде:
#include <iostream>
#include <tuple>
template<typename T>
struct Container
{
std::string id;
T value;
Container(std::string id, T value) : id(id), value(value) {}
};
template<typename... T>
struct ElementCodec
{
std::tuple<T...> values;
ElementCodec(T... args) : values(args...) {}
};
template<typename... T> ElementCodec(T...) -> ElementCodec<T...>;
int main()
{
ElementCodec a { int { 5 }, double { 3. }, Container { "52", 7 } };
auto [x, y, container] = a.values;
std::cout << x << ", " << y << ", " << container.value << '\n';
}
После специализации данного кода кортеж values
имеет тип std::tuple<int, double, Container<int>>
.То, что я хотел бы сделать, это уменьшить его до типа, хранящегося в контейнере, поэтому std::tuple<int, double, int>
, чтобы сделать th-доступ через container.value
необязательным.
Возможно ли это сделать в c ++ 17?Я застрял в этой проблеме некоторое время и не могу найти никаких ресурсов по этому поводу.