gpt4 book ai didi

c++ - 在没有宏的情况下在 C++98 中创建类型列表时遇到问题

转载 作者:太空狗 更新时间:2023-10-29 21:35:17 25 4
gpt4 key购买 nike

所以我正在阅读 this article来自 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_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;

我收到以下错误:

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;
^~~~~~~~~~~~~~~~~~~~

我在 C++98 中需要这个用于我正在编写的库,任何更像可变参数模板或像 boost::mpl 这样的第三方都不是一个选项。

那么问题是什么?我不太喜欢模板元编程(还)...

最佳答案

我不知道是否可以在 msvc 中工作(但可以使用我的 g++),但是,在您的代码中,您声明了 cons 部分特化。

所以,在第一次偏特化之前(题外话:我建议使用 typename 而不是 class 作为模板参数)

template <typename T1>
struct cons<T1, null_typelist, null_typelist,
null_typelist>
{
typedef typelist<T1, null_typelist> type;
};

你应该插入我认为可能有点像的通用声明

template <typename,
typename = null_typelist,
typename = null_typelist,
typename = null_typelist>
struct cons;

关于c++ - 在没有宏的情况下在 C++98 中创建类型列表时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43154805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com