2016-11-29 198 views
2
模板參數

比方說,我有一個模板類模板作爲專業化

template<typename T> 
class MyClass{ 
    //... 
} 

現在我要聲明功能:

template<typename U, typename M> 
void foo(U first, M second){ 
    //... 
} 

現在我需要寫這個函數,它接受的MyClass一個specjalization作爲第二個模板參數。我試圖寫這樣的東西

template<typename U, typename M> 
void foo(U first, template<typename T> MyClass<T> second){ 
    //... 
} 

不幸的是,它不起作用。你有什麼sugestions如何做到這一點?

回答

3

就這麼簡單

template<typename T> 
class MyClass{ 
// ... 
}; 

template<typename U, typename M> 
void foo(U first, M second){ 
} 

template<typename U, typename M> 
void foo(U first, MyClass<M> second){ 

} 
+0

我已經定義 模板 MyClass類{ // ... }; 模板 無效美孚(U第一,M個第二){ } 模板 無效美孚(U第一,MyClass的第二){ } 但是對於像foo > MyClass >(obj1,obj2)這樣的調用,它調用一個非專用函數,其中obj1和obj2是MyClass的對象 Matimath

+0

@Matimath這是因爲您提供了顯式模板參數,它們不允許選擇更專功能。做'foo(obj1,obj2)'或'foo ,int>(obj1,obj2)'。 – aschepler