编译器会忽略if else

时间:2013-09-06 06:36:33

标签: c++ arrays gcc c++11 g++

我有这样的功能

template<typename Arg, typename... Args>
void input(Arg &arg, Args&... args) {

在那里,我有一个if,检查arg是否是一个数组(我处理数组的方式不同)。然后我尝试访问数组的索引,但我得到subscripted value is neither array nor pointer。如果我不混合数组和正常变量,就不会发生这种情况。我该怎么办?

1 个答案:

答案 0 :(得分:1)

简单地重载函数以采用常规类型和数组类型,如下所示:

#include <iostream>

template <typename T>
void f(T t)
{
    std::cout<<"Regular version !\n";
}

template <typename T>
void f(T t[])
{
    std::cout<<"Array version !\n";
}

int main() 
{
    f(2); // Prints "Regular version !"
    int k[] = { 1, 2, 3 };
    f(k); // Prints "Array version !"
}

Working example