C++ 在C+;中创建类型列表时出现问题+;98没有宏
因此,我正在阅读Andrei Alexandrescu关于如何创建类型列表的文章,但本文中的以下代码不使用MSVC/GCC编译:C++ 在C+;中创建类型列表时出现问题+;98没有宏,c++,templates,template-meta-programming,template-specialization,c++98,C++,Templates,Template Meta Programming,Template Specialization,C++98,因此,我正在阅读Andrei Alexandrescu关于如何创建类型列表的文章,但本文中的以下代码不使用MSVC/GCC编译: template <class H, class T> struct typelist { typedef H head; typedef T tail; }; class null_typelist {}; template <class T1> struct cons<T1, null_typelist, null
template <class H, class T>
struct typelist
{
typedef H head;
typedef T tail;
};
class null_typelist {};
template <class T1>
struct cons<T1, null_typelist, null_typelist,
null_typelist>
{
typedef typelist<T1, null_typelist> type;
};
template <class T1, class T2>
struct cons<T1, T2, null_typelist, null_typelist>
{
typedef typelist<T1, typelist<T2,
null_typelist> > type;
};
template <class T1, class T2, class T3>
struct cons<T1, T2, T3, null_typelist>
{
typedef typelist<T1, typelist<T2, typelist<T3,
null_typelist> > > type;
};
template <class T1, class T2, class T3, class T4>
struct cons
{
typedef typelist<T1, typelist<T2, typelist<T3,
typelist<T4, null_typelist> > > > type;
};
typedef cons<float, double, long double>::type
floating_point_types;
模板
结构类型表
{
H型头;
T型尾;
};
类null_typelist{};
模板
结构控制
{
typedef类型列表类型;
};
模板
结构控制
{
typedef类型列表类型;
};
模板
结构控制
{
typedef类型列表类型;
};
模板
结构控制
{
typedef类型列表类型;
};
typedef cons::type
浮点型;
我得到以下错误:
a.cpp:21:8: error: 'cons' is not a class template
struct cons<T1, null_typelist, null_typelist,
^~~~
a.cpp:28:49: error: wrong number of template arguments (4, should be 1)
struct cons<T1, T2, null_typelist, null_typelist>
^
a.cpp:22:18: note: provided for 'template<class T1> struct cons'
null_typelist>
^
a.cpp:35:38: error: wrong number of template arguments (4, should be 1)
struct cons<T1, T2, T3, null_typelist>
^
a.cpp:22:18: note: provided for 'template<class T1> struct cons'
null_typelist>
^
a.cpp:42:8: error: redeclared with 4 template parameters
struct cons
^~~~
a.cpp:22:18: note: previous declaration 'template<class T1> struct cons' used 1
template parameter
null_typelist>
^
a.cpp:48:40: error: wrong number of template arguments (3, should be 1)
typedef cons<float, double, long double>::type
^
a.cpp:22:18: note: provided for 'template<class T1> struct cons'
null_typelist>
^
a.cpp:49:5: error: expected initializer before 'floating_point_types'
floating_point_types;
^~~~~~~~~~~~~~~~~~~~
a.cpp:21:8:错误:“cons”不是类模板
结构控制
^
a、 cpp:35:38:错误:模板参数的数量错误(4,应该是1)
结构控制
^
a、 cpp:22:18:注意:为“模板结构”提供
空\类型列表>
^
a、 cpp:42:8:错误:使用4个模板参数重新声明
结构控制
^~~~
a、 cpp:22:18:注意:以前的声明“模板结构cons”使用了1
模板参数
空\类型列表>
^
a、 cpp:48:40:错误:模板参数的数量错误(3,应该是1)
typedef cons::type
^
a、 cpp:22:18:注意:为“模板结构”提供
空\类型列表>
^
a、 cpp:49:5:错误:“浮点类型”之前应为初始值设定项
浮点型;
^~~~~~~~~~~~~~~~~~~~
对于我正在编写的库,我需要在C++98中使用它,任何类似于可变模板或第三方(如boost::mpl
)的东西都不能使用
那么问题是什么呢?我对模板元编程还不太了解。我不知道是否可以在msvc中工作(但可以使用我的g++),但是,在您的代码中,您声明了
cons
部分专门化
因此,在第一次部分专门化之前(主题外:我建议对模板参数使用typename
而不是class
)
模板
结构控制
{
typedef类型列表类型;
};
您应该插入泛型声明,我认为它可能类似于
template <typename,
typename = null_typelist,
typename = null_typelist,
typename = null_typelist>
struct cons;
模板
结构缺陷;
不,这根本不起作用。安德烈在没有一个编译器理解代码的时候写了一些材料,因此他无法让人检查。这可能是此类代码的一个示例。
template <typename,
typename = null_typelist,
typename = null_typelist,
typename = null_typelist>
struct cons;