C++ 为什么我会得到;参数'的使用;N';在“功能体”之外;?

C++ 为什么我会得到;参数'的使用;N';在“功能体”之外;?,c++,c++11,C++,C++11,我正在尝试重载[]操作符,以便能够访问std::tuple的元素。由于某些原因,我收到以下错误: 程序cpp:11:73:错误:在函数体外部使用参数“N” 程序cpp:11:73:错误:在函数体外部使用参数“N” 程序cpp:11:73:错误:在函数体外部使用参数“N” 程序cpp:11:89:错误:模板参数1无效 很奇怪,因为大多数都是第一个的重复。我不明白为什么会出现这样的错误,因为延迟返回类型的目的不是为了让我们可以对返回类型使用参数吗 #include <tuple> te

我正在尝试重载
[]
操作符,以便能够访问
std::tuple
的元素。由于某些原因,我收到以下错误:

程序cpp:11:73:错误:在函数体外部使用参数“N”
程序cpp:11:73:错误:在函数体外部使用参数“N”
程序cpp:11:73:错误:在函数体外部使用参数“N”
程序cpp:11:89:错误:模板参数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);
}
#包括
模板
结构类型列表
{
std::tuple-var;
类型列表(Args&&…Args):变量(std::forward(Args)…){
自动运算符[](std::size\u t const N)->typename std::tuple\u元素::type&&
{
返回std::get(var);
}
};
int main()
{
类型_列表数组(2,4,true);
}

如果有人能解释为什么会发生这种情况,以及我如何能让它发挥作用,我将不胜感激。谢谢。

您正试图使用
操作符[]
中的函数参数
N
(在编译时未知)作为
std::tuple\u元素的模板参数,该元素必须在编译时已知。

模板参数
N
是编译时的东西,而
操作符[]
参数
N
仅在运行时具体化。编译器不知道什么是
N
,因此它无法将其作为模板参数来理解。

为什么不能在编译时知道它?@templateboy:因为我可以编写
size\t I;cin>>i;有没有办法让参数
constexpr
?想想你要什么,等一下。您希望函数的类型根据传递给它的(运行时变化的)值而变化吗?这可能是在非类型化脚本语言中飞行,而不是在C++中。