在下面的代码中,我定义了一个AnotherClass模板来获取第二个类型的参数。这些参数中的每一个都是由另一个模板创建的类型。两个类型参数之间的唯一区别是传递给这些类型的int参数的值。模板。评论显示了我真正想做的事情。
#include <iostream>
using namespace std;
template <int size>
class MyClass {
private:
int sz;
public:
MyClass() {
this->sz = size;
}
void tellSize() {
cout << this->sz;
}
int length() {
return this->sz;
}
};
// template <typename T1>
template <typename T1, typename T2>
class AnotherClass {
private:
T1 myC;
T2 myCp1;
//templateof(T1)<parameterof(T1)+1> myCp1;
public:
};
int main() {
//AnotherClass<MyClass<10> > myC;
AnotherClass<MyClass<10>, MyClass<11> > myC;
return 0;
}
我真正想做的是将myCp1的类型静态声明为&#34;使用myC&#39; s模板,myC&#39; s参数增加1&#34;无需将两种类型都传递给AnotherClass模板......
有没有办法实现这个目标?
答案 0 :(得分:3)
您可以提供AnotherClass
的部分特化,它会进行模式匹配以分离出模板类和模板参数。
template <typename T>
class AnotherClass;
template <template <int> class SomeTemplate, int size>
class AnotherClass<SomeTemplate<size> >
{
SomeTemplate<size> myC;
SomeTemplate<size+1> myCp1;
};