Замена std::visit реализацией варианта посещения MapboxC++

Программы на C++. Форум разработчиков
Anonymous
 Замена std::visit реализацией варианта посещения Mapbox

Сообщение Anonymous »

В настоящее время я переношу код 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

Вернуться в «C++»