我有两个模板类,如
template <class T>
class MyClass1{};
template <class T>
class MyClass2{};
我有一个模板函数使用它们作为参数。这些类专门用于std :: string:
template <template class<std::string> T> myMethod(T<std::string>& arg){}
我想使用myMethod(objectOfMyClass1)和myMethod(objectOfMyClass2),但代码无法编译。如何为模板函数专门化模板类?
答案 0 :(得分:2)
首先,如果您的方法没有接受任何参数,您将无法根据需要调用它。
其次,MyClass1
和MyClass2
不是类,而是类模板 - 因此您不能拥有objectOfMyClass1
和objectOfMyClass2
。
如果你的函数专门针对任何类型的SomeClassTemplate<std::string>
形式的参数,那么你所追求的是部分函数模板特化,这在C ++中是不允许的。您将不得不使用部分专用的类:
template <class T>
struct MyMethodCall;
template <template <typename> class T>
struct MyMethodCall<T<std::string> > {
static void call(T<std::string> object) {
...
}
};
template <class T>
void myMethod(T & object) {
MyMethodCall<T>::call(object);
}
答案 1 :(得分:1)
这是一个可编辑的例子
template <class T>
class MyClass1{};
template <class T>
class MyClass2{};
template <template <typename> class T>
void myMethod(T<std::string>& arg){}
int main()
{
MyClass1<std::string> c1;
myMethod(c1);
MyClass1<std::string> c2;
myMethod(c2);
}