0

我有两个模板类,比如

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

4

2 回答 2

2

首先,如果您的方法不带任何参数,您将无法随意调用它。

其次,MyClass1andMyClass2不是类而是类模板——因此你不能拥有objectOfMyClass1and 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);
}
于 2012-08-21T09:25:01.123 回答
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);
}
于 2012-08-21T09:24:59.143 回答