[英]specialize a template class for a template function
我有两个模板类
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),但是代码无法编译。 如何专门针对模板函数使用模板类?
首先,如果您的方法没有任何参数,则将无法根据需要调用它。
其次, 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);
}
这是一个可编译的示例
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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.