使用typename并将typedef传递给函数的C ++模板

时间:2017-02-18 10:45:22

标签: c++ templates typedef typename

我正在以这种方式使用模板。

int main (void)
{
    plate targhe[MAX_CARS];        
    int ll = 0;

    plate targa;
    cin >> targa;

    ll = insert_ord(targhe, ll, MAX_CARS, targa);

    cout << endl;
    system("pause");
    return 0;
}

它有效,但当我传递一个typedef作为参数时,它说:没有匹配函数来调用&#34; insert_ord&#34;。

这是主要的。

AddRequiredServices(services)

1 个答案:

答案 0 :(得分:4)

template <typename T>
int insert_ord (T V[], int ll, int const LF, T e);

上面的 function-template 不适用于类型为

的参数
(int[999][20], int, int, int[20])

insert_ord函数的第一个参数是plate的二维数组,而最后一个是{1}}类型,它是一维数组。您应该声明 function-template ,如:

plate

Live On Coliru

然而,你的代码有一些挑剔。您template <typename T, int sizeOuter, int sizeInner> int insert_ord (T (&v)[sizeInner][sizeOuter], int ll, int const LF, T (&e)[sizeOuter]); 中不需要void。如果可能,请int main()优先于constexpr。最重要的是,使用std::array<T, N>或考虑将数据结构包装在#defineclass