我正在尝试重载[]
运算符,以便可以访问 a 的元素std::tuple
。由于某种原因,我收到以下错误:
prog.cpp:11:73:错误:在函数体 prog.cpp:11:73 外使用参数“N”
:错误:在函数体 prog.cpp:11:73 外使用参数“N”
:错误:使用函数体
prog.cpp:11:89外的参数“N” :错误:模板参数 1 无效
很奇怪,因为它们中的大多数都是第一个的重复。而且我不明白为什么会出现该错误,因为延迟返回类型的全部意义不在于我们可以将参数用于返回类型吗?
#include <tuple>
template <class... Args>
struct type_list
{
std::tuple<Args...> var;
type_list(Args&&... args) : var(std::forward<Args>(args)...) {}
auto operator[](std::size_t const N) -> typename std::tuple_element<N, std::tuple<Args...>>::type&&
{
return std::get<N>(var);
}
};
int main()
{
type_list<int, int, bool> array(2, 4, true);
}
如果有人能解释为什么会发生这种情况以及我如何让它发挥作用,将不胜感激。谢谢。