繁体   English   中英

为模板功能专门化模板类

[英]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),但是代码无法编译。 如何专门针对模板函数使用模板类?

首先,如果您的方法没有任何参数,则将无法根据需要调用它。

其次, MyClass1MyClass2不是类,而是类模板-因此,您不能拥有objectOfMyClass1objectOfMyClass2

如果您的函数专门针对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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM