вопрос о форсированном слиянии

У меня возникли проблемы с компиляцией следующего (я новичок в fusion). В частности, я не уверен, откуда берется "_" (в is_same)? Из boost::лямбда? Буст::mpl? Какое включение мне нужно для компиляции?

template <typename T>
struct check
{ 
  const T& value;

  check(const T& v) : value(v) {}

  template <typename X>
  bool operator()(const fusion::pair<X,T>& data) const
  {
    return data.second == value;
  }
};

template <typename T1, typename T2, typename P>
bool new_match(const P& p, const T2& values)
{
  fusion::for_each(fusion::filter_if<boost::is_same<_, T2> >(p), check(values));
  return true; // not finished, just trying to compile
}

Спасибо!


person Frank    schedule 22.06.2011    source источник


Ответы (1)


Да, это действительно должно быть boost::mpl::_, как показано в документацию fusion::filter_if, поэтому вам потребуется только #include <boost/mpl/placeholders.hpp> и квалификация или объявление использования, чтобы включить _ в область действия.

person ildjarn    schedule 22.06.2011
comment
Я прочитал документ только до точки и видел только пример во введении... Я не проверял ссылку на filter_if :-( Спасибо за указатель! :-) - person Frank; 23.06.2011
comment
@Фрэнк: Не беспокойся. :-] Справедливости ради следует отметить, что документация Fusion определенно предполагает глубокое предварительное знание MPL и часто объединяет символы из обеих библиотек без особых объяснений. - person ildjarn; 23.06.2011