我试图删除元组的最后一个元素。当我在元组中只有一个元素被删除时,它就可以工作。但是当我有一个以上的时候,事情就会出错。我不明白为什么这不起作用。这是我收到的错误:尝试从元组中删除最后一个类型失败
prog.cpp: In function ‘
int main()
’:
prog.cpp:24:22: error: incomplete type ‘remove_last<std::tuple<int, int> >
’ used in nested name specifier
prog.cpp:24:22: error: incomplete type ‘remove_last<std::tuple<int, int> >
’ used in nested name specifier
prog.cpp:24:70: error: template argument 1 is invalid
#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"
);
}
的错误走开时,我的专长之一使模板参数非可变参数。但是,那变成了一个专门化,它只能处理一个元素,而不是我想要的元素。我怎样才能得到这个与可变参数?换句话说,当元组中有多个元素时,我怎么才能使它工作?
我不明白这个答案。为什么*“参数包是贪婪的”*不适用于'concat_tuple'的特殊化? – Nawaz 2013-04-28 21:52:51
@Nawaz:因为'concat_tuples'的类型参数的数量是固定的 – 2013-04-28 21:54:24
我不理解递归部分。你能向我解释这是如何消除最后一个元素? – 0x499602D2 2013-04-28 21:55:39