正确使用std :: variant_alternative_t

时间:2019-10-07 14:42:12

标签: c++

我的目的是在std :: variant的当前索引处获取类型的名称。我所知道的是变量的当前索引。 我尝试了不同的方法,但老实说,我在很大程度上不再理解文档(cppreference)。对于我来说,所有这些重载模板都非常复杂,而无需一段工作代码。

我猜std :: variant_alternative_t可能会有所帮助,但是文档不完整(没有示例:https://en.cppreference.com/w/cpp/utility/variant/variant_alternative)。

让我们假设以下示例。

std::variant<int, float> testVariant{ 12.2f };

std::cout << std::get<1>(testVariant); // Everything is cool
//std::cout << std::get<testVariant.index()>(testVariant) // Unfortunately, incorrect syntax 
//... why ever, i dont see any difference to the line above

//std::variant_alternative_t<???>(???) i dont have any cloud how to use it

2 个答案:

答案 0 :(得分:3)

正确的用法包括两个模板参数:索引和要索引到的变体类型。

const model = require('./model/Amministratore.js')

或者,如果您既不想拼写完整的变体,也不给它提供类型别名(using MyIndexedType = std::variant_alternative_t<1, std::variant<int, float>>; ),请使用using MyVariant = std::variant<int, float>

decltype

请注意,尽管必须在编译时知道索引。您不必在编译时就了解所有静态类型。

答案 1 :(得分:3)

您需要访问变体,该变体将为您生成所有分支:

std::visit([&](auto const &value) {
    std::cout << "Index " << testVariant.index() << ", ";
    std::cout << "type " << typeid(decltype(value)).name() << ", ";
    std::cout << "value " << value << '\n';
}, testVariant);

See it live on Wandbox