我试图超载[]
运营商,所以我可以访问std::tuple
的元素。出于某种原因,我收到以下错误:为什么我得到“在函数体外使用参数'N'”?
prog.cpp:11:73: error: use of parameter ‘N’ outside function body
prog.cpp:11:73: error: use of parameter ‘N’ outside function body
prog.cpp:11:73: error: use of parameter ‘N’ outside function body
prog.cpp:11:89: error: template argument 1 is invalid
很奇怪,因为他们大多是第一次的重复。我不明白为什么我得到这个错误,因为不是晚期返回类型的全部要点,以便我们可以使用返回类型的参数?
#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);
}
如果任何人都可以解释为什么这种情况正在发生,我怎么能得到这个工作,这将是非常赞赏。谢谢。
想想你要的是什么,一分钟。您希望函数的*类型根据传递给它的(运行时变化的)*值*而改变?这可能会以非类型化的脚本语言飞行,但不能用C++语言。 – 2013-04-29 22:59:25