2016-11-29 117 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