如何将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 constexpr
s。如果变量包含字符串,则无需转换;只是打电话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] 删除。
我来说两句