c ++中模板的部分特化

roo*_*kie 2 c++ templates

是否有可能在c ++中做这样的事情:

template<class T1, class T2>
  class A<T1*, T2> {
    T1* var;
    T2 var1;

};

template<class T1, class T2>
  class A<T1, T2*> {
    T1 var;
    T2* var1;

};
Run Code Online (Sandbox Code Playgroud)

实际上我想知道我是否可以达到模板重载,当两个类具有相同的名称但模板中的参数不同时,提前感谢任何好主意

Joh*_*itb 6

这就是所谓的部分模板专业化

template<class T1, class T2>
class A;

template<class T1, class T2>
class A<T1*, T2> {
    T1* var;
    T2 var1;
};

template<class T1, class T2>
class A<T1, T2*> {
    T1 var;
    T2* var1;
};
Run Code Online (Sandbox Code Playgroud)

当然,你需要第三个A<T1*, T2*>才能安全起来.否则你会得到两个指针的含糊不清.

  • 是.这里显示的关键细节,但是没有明确地调用,是你需要首先声明类的完全通用形式(这是代码示例的前两行),即使你没有定义它.问题中的原始代码将不起作用,因为A的第二个定义不是之前任何内容的特化. (2认同)