【发布时间】:2018-02-07 18:54:58
【问题描述】:
快速提问:
是否可以在运行时获取std::variant 使用的底层类型?
我的第一个猜测是像这样使用decltype():
std::variant<int, float> v;
v = 12;
std::vector<decltype(v)> vec;
但我的向量声明的类型是std::vector<std::variant<int, float>> 而不是std::vector<int>。
知道如何实现这一目标吗? :)
【问题讨论】:
-
@EdHeal
holds_alternative检查变体当前是否拥有给定类型(这很好),但不直接返回基础类型:/ -
取决于你想要什么,
std::visit可能会有所帮助。 -
在
std::variant<int,float>的情况下,与仅使用double相比几乎没有优势,它可以完全保存所有ints 和所有floats。此外,GCC 报告sizeof(std::variant<int,float>) == sizeof(double),因此也没有任何额外的内存用于存储doubles。当然,这并不意味着问题无效,因为您可能只是为了问题而简化了用例。