专门为模板函数设计模板类

时间:2012-08-21 09:13:40

标签: c++ templates

我有两个模板类,如

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),但代码无法编译。如何为模板函数专门化模板类?

2 个答案:

答案 0 :(得分:2)

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

其次,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);
}

答案 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);
}