Здравствуйте, Marty, Вы писали:
M>Захотелось: M>1) поиметь функцию типа std::index (которой на самом деле вроде нет), которая для variant'а вызывает его index() и кастит к моему enum — что тут лучше придумать? Или есть что-то такое, просто я не в курсе? M>2) аналог std::get. Кстати, я что-то всегда вызываю std::get, но, по идее, тут должен работать просто get через ADL, и я могу написать свою пачку перегрузок get в том же NS, где и variant, и всё будет работать просто через вызов get, так? M>3) holds_alternative, которая принимает variantKind и variant, и возвращает bool — тут по идее, так же как с get M>4) get_if — ну это уже на базе остального делается, вроде
По-моему, во всех этих вариантах писанины будет существенно больше, чем при использовании std::visit. Для каждого типа варианта нужно написать энум, потом скастить к этому энуму индекс, потом этот энум запихнуть в какой-то switch и в конечном итоге, скорее всего, вызвать для каждого случая какую-то функцию. Ты же не будешь писать пласты кода прямо внутри switch-а.
А через std::get твоя задача (УЗНАТЬ, что лежит в вариарианте) вообще не решается. Рассчитано на то, что ты сам знаешь, что лежит в варианте и вызываешь std::get с правильным индексом или типом, в противном случае получишь исключение.
Третий и четвёртый варианты — это проверить, а не узнать.
В общем, осваивай std::variant, и твоя жизнь сразу упростится.
--
Справедливость выше закона. А человечность выше справедливости.