元组的 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;
}
当尝试将元组类型 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;
}