是否可以重载函数以接受具有非类型模板参数的所有实例

时间:2013-06-01 07:17:58

标签: c++ templates specialization non-type

template<typename T,int I=5> struct A{

    T _store[I];

};

template<typename T,int I>
void doSomething(A<T,I>& a){

  std::cout << "basic template for all other types" << std::endl;

}

template<>
void doSomething(A<int>& a){

 std::cout << "specialized integer template" << std::endl;

}

int main(int argc, char** argv){


    A<char> a;
    A<int> i;
    A<int,10> i10;

    doSomething(a);
    doSomething(i);
    doSomething(i10); //this does not call any specialized version yet

    return 0;

}

有没有办法声明doSomething专门化接受第二个参数是什么的所有A<int,...>个实例,即使每个不同的A<int,...>是更严格的不同类型,

这实际上可以使这个可行使用,如果我不需要理论上声明和跟踪所需的每个不同的专业化

我无法确定这一点。

1 个答案:

答案 0 :(得分:2)

template<int I>
void doSomething(A<int, I> & value)
{...}