В настоящее время я переношу код C++17 на C++14. Поскольку в C++14 нет варианта, я использую реализацию варианта от MapBox, которая доступна здесь. По сути, замена варианта с помощью mapbox::util::variant работает нормально, но есть одна вещь, с которой я не могу работать, а именно замена вызовов std::visit на Mapbox. те. Исходный код выглядит так:
Код: Выделить всё
std::string XLSheet::name() const
{
return std::visit([](auto&& arg) { return arg.name(); }, m_sheet);
}
Я попробовал переписать код следующим образом:
Код: Выделить всё
std::string XLSheet::name() const
{
return mapbox::util::variant::visit([](auto&& arg) { return arg.name(); }, m_sheet);
}
Но это не работает. Я получаю следующую ошибку:
Код: Выделить всё
template class mapbox::util::variant used without template parameters
Итак, что мне следует передать в качестве параметров шаблона, пожалуйста? У меня вообще нет опыта работы с C++. m_sheet определяется как mapbox::util::variant m_sheet;, поэтому я также попытался переписать код следующим образом:
Код: Выделить всё
std::string XLSheet::name() const
{
return mapbox::util::variant::visit([](auto&& arg) { return arg.name(); }, m_sheet);
}
Но затем я получаю следующую ошибку:
Код: Выделить всё
no matching function call to mapbox::util::variant::visit()
Теперь у меня закончились идеи. Кто-нибудь может помочь?
Подробнее здесь:
https://stackoverflow.com/questions/790 ... ementation