作为练习,我试图为一个元组定义一个可变模板,但我发现没有元素的基本情况不起作用。
template <typename Head, typename... Tail>
struct Tuple : Tuple<Tail...>
{
Tuple(const Head& head, const Tail&... tail)
: Base{tail...}, m_head{head} {}
private:
using Base = Tuple<Tail...>;
Head m_head;
};
template <> struct Tuple<> {};MSVC 2022提供了以下错误:
C:\projects\cpp\cpp_programming_language\28_metaprogramming\variadic_tuple.cpp(12): error C2976: 'Tuple': too few template arguments
C:\projects\cpp\cpp_programming_language\28_metaprogramming\variadic_tuple.cpp(2): note: see declaration of 'Tuple'
C:\projects\cpp\cpp_programming_language\28_metaprogramming\variadic_tuple.cpp(12): error C2913: explicit specialization; 'Tuple' is not a specialization of a class template为什么这不起作用,以及如何解决它?
发布于 2022-08-25 15:15:34
一个正确的咒语是
template <typename...> struct Tuple;
template <> struct Tuple<> {};
template <typename Head, typename... Tail>
struct Tuple<Head, Tail...> : Tuple<Tail...>
{(其余内容与您的代码相同)。
https://stackoverflow.com/questions/73489837
复制相似问题