мета-функция copy_if в стиле mpl для вектора шаблона - PullRequest
2 голосов
/ 01 января 2011

У меня есть метапрограмма, которая отлично работает с обычным бустом mpl.Это выглядит примерно так:

template <class Vector, class ResultKind, class Custom>
struct FilterChildrenIfNotOk
{
  typedef typename 
    copy_if<Vector, 
            or_<is_same<boost::mpl::placeholders::_1, ResultKind>,
                IsOk<boost::mpl::placeholders::_1, 
                     ResultKind, 
                     Custom> > >::type type;
};

Я пытаюсь скомпилировать его с помощью вектора с переменными шаблонами (mpl :: vector).Для этого я использую реализацию вектора шаблонов переменных, найденную здесь: https://svn.boost.org/svn/boost/sandbox/variadic_templates

Я не смог найти применимые реализации copy_if, remove_if и count_if в репозитории, хотя есть некоторые тестыЭти метапрограммы есть, и я просто не могу их найти?Кроме того, не могли бы вы помочь мне реализовать один из них, так что он также поддерживает местозаполнители mpl.Заранее спасибо за помощь.

1 Ответ

1 голос
/ 06 января 2011

Давайте начнем с подсказки: сгиб способ более мощный, чем можно подумать.Например, подсчет количества элементов в последовательности состоит только в применении fold с начальным состоянием 0 и функцией, которая принимает состояние (количество элементов на данный момент) и элемент, и возвращает the_state + 1.

Теперь вы можете написать count_if, например?(очевидно, используя fold)

Если вам не удастся, я помогу вам, пока вы не добьетесь успеха.

...