C++元编程库boost中的mp11模块提供了一系列便捷的元编程算法和函数。其中mp_is_list即为判断一个类型是否是列表的元函数。
mp_is_list函数的定义如下:
template <class T> struct mp_is_list;
它继承自std::false_type或std::true_type,根据是否是列表类型而定。
下面是一个测试使用mp_is_list函数的程序代码:
#include <iostream>
#include <type_traits>
#include <boost/mp11/list.hpp>
#include <boost/mp11/utility.hpp>
int main() {
using namespace std;
using namespace boost::mp11;
// test for list type
static_assert(mp_is_list<mp_list<int, char, double>>::value);
static_assert(mp_is_list<mp_list<int, char>>::value);
static_assert(mp_is_list<mp_list<>>::value);
// test for non-list type
static_assert(!mp_is_list<int>::value);
static_assert(!mp_is_list<char>::value);
static_assert(!mp_is_list<double>::value);