2013-06-01 5 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