2013-06-01 22 views
1
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,...>實例regardles的方式,即使每個不同的A<int,...>是一個不同類型的條款要嚴格,是有可能重載函數接受的所有實例與非類型模板參數

這實際上使這個可行的使用,如果我沒有在理論上申報和跟蹤每個不同的分工,將需要的

我沒有能夠確定這一點。

回答

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

非常感謝,現在有道理 – vurentjie