C++ 模板作为专业化的模板参数

C++ 模板作为专业化的模板参数,c++,templates,C++,Templates,假设我有一个模板类 template<typename T> class MyClass{ //... } 模板 类MyClass{ //... } 现在我想声明函数: template<typename U, typename M> void foo(U first, M second){ //... } 模板 无效foo(U第一,M第二){ //... } 现在我需要为这个函数编写一个规范,它将MyClass作为第二个模板参数。我试着写这样的东

假设我有一个模板类

template<typename T>
class MyClass{
    //...
}
模板
类MyClass{
//...
}
现在我想声明函数:

template<typename U, typename M>
void foo(U first, M second){
    //...
}
模板
无效foo(U第一,M第二){
//...
}
现在我需要为这个函数编写一个规范,它将MyClass作为第二个模板参数。我试着写这样的东西

template<typename U, typename M>
void foo(U first, template<typename T> MyClass<T> second){
    //...
}
模板
void foo(U优先,模板MyClass第二){
//...
}
不幸的是,它不起作用。你有什么建议怎么做吗?

尽可能简单

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){

}
模板
类MyClass{
// ...
};
模板
无效foo(U第一,M第二){
}
模板
void foo(U第一,MyClass第二){
}

我已经定义了模板类MyClass{//…};模板void foo(U-first,M-second){}模板void foo(U-first,MyClass-second){}但是对于像foo(obj1,obj2)这样的调用,它调用一个非专用函数,其中obj1和obj2是MyClass@Matimath这是因为您提供了显式模板参数,不允许选择更专门的函数。只需执行
foo(obj1,obj2)
foo(obj1,obj2)