如何在C++中制作像std::tuple这样的递归类型?

问题描述 投票:0回答:2

我正在尝试使用像

std::tuple
这样的递归模板创建类型,不幸的是它无法编译,但是我的做法似乎与
tuple
源代码中的方式相同。我正在使用 Visual Studio 2022 进行编译,并使用
-std:c++latest
并收到错误
error C3856: 'RecursiveType': symbol is not a class template

这是一个最小的例子:

struct Param {
};

template <>
struct RecursiveType<> { // empty base case

};

template <Param T, Param... Rest>
struct RecursiveType<T, Rest...> : public RecursiveType<Rest...> { // recursive type definition

};
c++ variadic-templates parameter-pack
2个回答
0
投票

您缺少主模板。你的两个定义都是专业化的。

template <Param... Params>
struct RecursiveType;

在 Godbolt 上查看


0
投票

您缺少主模板的声明。您使用的语法是专门化的。

struct Param {
};

template <Param...>
struct RecursiveType; //The primary template must be declared

template <>                                             struct RecursiveType<> { // empty base case             
};

template <Param T, Param... Rest>                       struct RecursiveType<T, Rest...> : public RecursiveType<Rest...> { // recursive type definition

};
© www.soinside.com 2019 - 2024. All rights reserved.