元组的 C++ 模板类型包专业化

c++ template type pack specialization for tuple

当尝试将元组类型 i 运行 实现为空元组的问题时。
这是我使用的类型结构:

template <class T, class... Ts>
struct Tuple : public Tuple<Ts...> {};

template <class T>
struct Tuple {};

一旦我尝试为无类型添加重载,编译器就会抱怨:Too few template arguments for class template 'Tuple':

template <> struct Tuple<> {};

我猜是因为 Tuple 类型最初是用至少一个提供的类型声明的,编译器不能用不同的模板参数集重载相同的类型,但我想知道如何在没有的情况下解决这个问题完全重构我的代码。
我的第一个想法是先定义像 template <class... Ts> struct Tuple {}; 这样的元组,然后再添加其他重载,但编译器却抱怨模板参数太多。

您的模板需要至少一个参数。您可以像这样更改它以允许零个或多个:

template <typename ... Ts>
struct Tuple;

template <>
struct Tuple<> {};

template <class T,class... Ts>
struct Tuple<T,Ts...> : public Tuple<Ts...> {};

int main()
{
    Tuple<int,int,double> t;
}