我正在尝试删除元组的最后一个元素。当我在元组中只有一个元素要删除时,它可以工作。但是当我有多个时,事情就会出错。我不明白为什么这不起作用。这些是我得到的错误:
prog.cpp:在函数“<code>int main()”中:
prog.cpp:24:22:错误:不完整的类型“<code>remove_last<std::tuple<int, int>>”在嵌套名称说明符中使用prog.cpp:24:22:错误:嵌套名称说明符 prog.cpp:24:70
中使用的不完整类型 '<code>remove_last<std::tuple<int, int> >' :错误:模板参数 1 无效
#include <tuple>
#include <type_traits>
template <class T>
struct remove_last;
template <class T>
struct remove_last<std::tuple<T>>
{
using type = std::tuple<>;
};
template <class... Args, typename T>
struct remove_last<std::tuple<Args..., T>>
{
using type = std::tuple<Args...>;
};
int main()
{
std::tuple<int, int> var;
static_assert(
std::is_same<remove_last<decltype(var)>::type,
std::tuple<int>>::value, "Values are not the same"
);
}
当我在其中一种专业化中使模板参数为非可变参数时,错误就消失了。但后来这变成了一种专业化,它只会处理一个包含两个元素的元组——而不是我的目标。我怎样才能让它与可变参数一起工作?换句话说,当元组中有多个元素时,我怎样才能让它工作?