У меня есть следующий код:
typedef boost::variant<LandSearchParameter, WaterSearchParameter> SearchParameter;
enum Visibility{
CLEAR,
CLOUDY,
FOG,
SMOKE
};
class DetectionGenerator : public boost::static_visitor<double>{
public:
DetectionGenerator(const EnvironmentalFactors& factors);
double operator()(const LandSearchParameter& land, Visibility vis) const;
double operator()(const WaterSearchParameter& water, Visibility vis) const;
private:
const EnvironmentalFactors mFactors;
};
но если я попытаюсь использовать его с boost::apply_visitor
следующим образом:
SearchParameter param = globeCover.generateSearch(lat, lon, altitude);
Visibility vis = weather.generateVisibility(lat, lon, altitude, bearing);
DetectionGenerator detectGen(envFactors);
double prob = boost::apply_visitor(detectGen, param, vis);
и получите следующее от gcc:
ошибка: нет соответствующей функции для вызова ‘apply_visitor(const SearchRescue::DetectionGenerator&, const boost::variant<boost::tuples::tuple<double, double, double, double, double, bool, bool, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type>, boost::tuples::tuple<std::size_t, std::size_t, double, double, double, bool, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type>, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_>&, SearchRescue::Visibility)
Если я пытаюсь обернуть перечисление Visibility
в boost::variant
, я получаю ту же ошибку только вместо Visibility
, она читает все эти ненужные файлы и любое имя, выбранное для варианта. Я перечитал документы по повышению для двоичного посещения , но я в растерянности. Обратите внимание, что все эти вещи находятся в одном пространстве имен.
Обновление
Это было моей попыткой, которая была проблемой. Выше не было показано, что у меня был посетитель как const
переменная. Как только я вынул const
из картинки, она скомпилировалась. Спасибо всем за попытку помочь мне. Хотел бы я дать больше голосов.