Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Обернуть std::get в boost::phoenix::function


Автор: EnergoHokum 15.12.2011, 08:37
Доброго времени суток. Возникла следующая проблема: попытка использовать phoenix-овскую обёртку над std::get в semantic action приводит к ошибке
Цитата

error: no matching function for call to 'boost::phoenix::function<phoenix_get_impl>::operator()(const boost::phoenix::actor<boost::spirit::argument<0> >&) const'

Вот код, который я наваял
Код

struct phoenix_get_impl
{
  template <std::size_t I,typename... Args>
  struct result
  {
    typedef typename std::tuple_element<I,std::tuple<Args...>>::type type;
  };
  template <std::size_t I,typename... Args>
  typename result<I,Args...>::type& operator () (std::tuple<Args...>& t)
  {
    return std::get<I> (t);
  }
};
ph::function<phoenix_get_impl> const phoenix_get = phoenix_get_impl();

Вот его применение
Код

... [std::cerr << phoenix_get.operator () <0> (qi::_1)];// qi::_1 => std::tuple<int,int,float>

Как заставить этот код работать?

Автор: boostcoder 15.12.2011, 09:53
приведи компилябельный пример, например http://liveworkspace.org/.

Автор: EnergoHokum 15.12.2011, 10:26
http://liveworkspace.org/code/8b7e74249e1bb339de16d30f9a348a76, так сказать, "компилируемый" пример того, что хочется сделать. У себя собираю на mingw-gcc 4.4.0boost 1.46.1.

Добавлено через 9 минут и 35 секунд
Судя по сигнатурам http://www.boost.org/doc/libs/1_46_1/libs/spirit/phoenix/doc/html/phoenix/actors.html, затея не удастся.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)