如何将variant的元素转换为std :: string(c ++)

小时30000

如何将variant的元素转换为std :: string?

void Function(const std::string str)
{
~~
}

std::variant<std::string, int, float> a{ 32 };

我应该将a的元素传递给Function。我不能更改函数的参数。而且我不想添加任何辅助功能。

我只是想将a的元素转换为字符串。我尝试了很多方法。但是一切都没有。我知道我能做到这一点通过std::get<std::string>(a)std::get<int>(a)std::get<float>(a)但我需要很多尝试catch语句来做到这一点。

我想知道更多聪明的方法。

吉尼亚提乌斯

您可以使用std::visit某些if constexprs。如果变量包含字符串,则无需转换;只是打电话Function否则用于std::to_string转换数值参数:

#include <iostream>
#include <string>
#include <variant>

template<class> inline constexpr bool always_false_v = false;

void Function(const std::string str)
{
    std::cout << str << std::endl;
}

int main()
{
    std::variant<std::string, int, float> a{ 32 };

    std::visit([](auto&& arg) {
        using T = std::decay_t<decltype(arg)>;
        if constexpr (std::is_same_v<T, std::string>)
            return Function(arg);
        else if constexpr (std::is_arithmetic_v<T>)
            return Function(std::to_string(arg));
        else 
            static_assert(always_false_v<T>, "non-exhaustive visitor!");
    }, a);

    return 0;
}

演示版

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章