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



如何将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 constexprs一起使用。如果变体包含字符串,则不需要转换;只需呼叫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

最新更新