Функция holds_alternative
Функция holds_alternative проверяет, содержит ли объект std::variant значение указанного типа. Она принимает объект variant и возвращает true, если в данный момент variant хранит значение именно этого типа, и false в противном случае. Тип передаётся в качестве шаблонного параметра.
Синтаксис
std::holds_alternative<T>(v)
Пример
Давайте создадим variant, который может хранить int, double или string, и проверим, какой тип хранится в нём сейчас:
#include <iostream>
#include <variant>
#include <string>
using namespace std;
int main()
{
variant<int, double, string> v = 123;
cout << boolalpha;
cout << holds_alternative<int>(v) << endl;
cout << holds_alternative<double>(v) << endl;
cout << holds_alternative<string>(v) << endl;
return 0;
}
Результат выполнения кода:
true
false
false
Пример
Давайте изменим значение variant на строку и снова проверим тип:
#include <iostream>
#include <variant>
#include <string>
using namespace std;
int main()
{
variant<int, double, string> v = "abcde";
cout << boolalpha;
cout << holds_alternative<int>(v) << endl;
cout << holds_alternative<string>(v) << endl;
return 0;
}
Результат выполнения кода:
false
true
Пример
Давайте используем holds_alternative вместе с if для выбора действий в зависимости от хранимого типа:
#include <iostream>
#include <variant>
#include <string>
using namespace std;
int main()
{
variant<int, string> v = 123;
if (holds_alternative<int>(v)) {
cout << "int: " << get<int>(v) << endl;
} else if (holds_alternative<string>(v)) {
cout << "string: " << get<string>(v) << endl;
}
return 0;
}
Результат выполнения кода:
"int: 123"