如何将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)
做到这一点但我需要许多try-catch语句来实现这一点。
我想知道更多聪明的方法。
您可以将std::visit
与一些if constexpr
s一起使用。如果变体包含字符串,则不需要转换;只需呼叫CCD_ 6。否则,使用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;
}
演示
要获取变量的活动元素,无论其类型如何,请使用visit
。为了访问变体,您需要一个可以接受所有包含类型的模板函数。该模板可以将参数转换为字符串,例如使用std::to_string
,并将其作为参数传递给Function
。