如何使用模板函数中的模板参数实例化其长度的数组

时间:2018-10-10 13:15:54

标签: c++ templates

我想以这种方式实例化数组长度:

#include <iostream>

using namespace std;

template<size_t M, size_t N>
void instanBoolArr(size_t M, size_t N)
{
    bool a[M];
    bool b[N];

}

int main(void)
{
    size_t M = 1;
    size_t N = 1;
    instanBoolArr(M, N);
    return 0;
}

但是clang编译器告诉我错误消息:

  

prog.cc:6:27:错误:“ M”阴影模板参数的声明   void instanBoolArr(size_t M ,size_t N)

     

prog.cc:5:17:注意:模板参数在此处声明   模板

     

prog.cc:6:37:错误:声明“ N”阴影模板参数   void instanBoolArr(size_t M,size_t N

     

prog.cc:5:27:注意:模板参数在此处声明   模板

     

prog.cc:9:10:警告:未使用的变量'b'[-Wunused-variable]       bool b [N];

     

prog.cc:8:10:警告:未使用的变量'a'[-Wunused-variable]       bool a [M];

     

prog.cc:17:5:错误:没有匹配的函数可调用'instanBoolArr'       instanBoolArr(M,N);

     

prog.cc:6:6:注意:候选模板被忽略:无法推断模板   参数“ M”无效instanBoolArr(size_t M,size_t N)

clang编译器的版本是7.0。

我想以这种方式实现它,但是我使用了C ++模板,但是在网上找不到对我有用的答案。

所以,如果不介意,PLZ会指出我的错并帮助我解决问题。

此致。

1 个答案:

答案 0 :(得分:2)

编译器错误非常明显。您的函数参数正在掩盖您的模板参数。

将功能更改为:

template<size_t M, size_t N>
void instanBoolArr()
{
    bool a[M];
    bool b[N];
}