Использование boost mpl pop_front - PullRequest
       2

Использование boost mpl pop_front

0 голосов
/ 29 октября 2011

Имея:

#include <typeinfo>
#include <boost/mpl/vector.hpp>
#include <boost/mpl/pop_front.hpp>
int main()
{
    typedef boost::mpl::vector<char,short,int,long,long long> v;
    typedef typename pop_front<v>::type poped;
}

проблема в том, что poped не равен boost :: mpl :: vector , но: boost :: mpl :: v_mask >

Как мне сделать так, чтобы вектор возвращался без первого элемента?

Ответы [ 2 ]

1 голос
/ 12 октября 2013

Может быть, mpl :: equal поможет вам понять, почему это вообще не имеет значения.

Просто убедитесь, что оно одинаковое, но не обязательно одинаковое.

BOOST_MPL_ASSERT((mpl::equal<
    typename pop_front<v>::type,
    mpl::vector<short,int,long,long long>
>));

Это все, что вам действительно нужно; -)

0 голосов
/ 24 ноября 2011

Я не уверен, что это возможно с использованием функций MPL. Даже если вы попытаетесь скопировать poped в vector, используя copy и back_inserter, вы снова получите тип, который на самом деле не является vector. Это сделано специально: как и в Boost.Fusion, алгоритмы и метафункции MPL возвращают представления исходной последовательности, обеспечивая ленивую оценку. Эти представления могут использоваться как исходные последовательности, поэтому вам не нужно беспокоиться о том, каковы их фактические типы, и просто используйте их, как если бы они были vector (или list с, или map с и т. 1009 *

...