我有两个类A和B,它们都是A中成员函数的模板类,我希望它在A的类型为B时以特殊方式起作用
正常情况下,对于其他任何类型,我都不知道该怎么做?

template <class B>
class B
{
private:
  T m;
public:
  ...... any member functions
}

template <class T>
class A
{
private:
  T var;
public:
  void doSomething();
};
template <class T>
void A<T>::doSomething(){...........//implementation}
template <class T>
void A<B<T>>::doSomething(){................//different implementation}

最佳答案

您可以通过以下方式专门化A

template <class T>
class A<B<T>> {
   // ...
};


这是partial template specialization的实例。

如果拒绝对整个类进行专业化,则可以将工作从A<T>::doSomething()推迟到部分专业化的函数doSomethingForA<T>(A &)中,该函数可能是A<T>的朋友。

关于c++ - 专门化模板成员函数,以特殊的模板类以不同的方式工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29868008/

10-16 04:41