【发布时间】:2019-04-17 14:46:15
【问题描述】:
在以下代码中:
#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> 不需要通过container.value 进行访问。
这可以在 c++17 中实现吗?我已经被这个问题困扰了一段时间,并且找不到任何关于此的资源。
【问题讨论】:
标签: c++ templates c++17 variadic-templates