C++:将类型声明为另一个模板化类型的变体
C++: Declare type as variant of another templated type
在下面的代码中,我定义了一个 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 的类型静态声明为 "use myC's template with myC's parameter incremented by 1",而不必将这两种类型都传递给 AnotherClass 模板...
有办法实现吗?
您可以提供 AnotherClass
的部分特化,它进行模式匹配以分离模板 class 和模板参数。
template <typename T>
class AnotherClass;
template <template <int> class SomeTemplate, int size>
class AnotherClass<SomeTemplate<size> >
{
SomeTemplate<size> myC;
SomeTemplate<size+1> myCp1;
};
在下面的代码中,我定义了一个 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 的类型静态声明为 "use myC's template with myC's parameter incremented by 1",而不必将这两种类型都传递给 AnotherClass 模板...
有办法实现吗?
您可以提供 AnotherClass
的部分特化,它进行模式匹配以分离模板 class 和模板参数。
template <typename T>
class AnotherClass;
template <template <int> class SomeTemplate, int size>
class AnotherClass<SomeTemplate<size> >
{
SomeTemplate<size> myC;
SomeTemplate<size+1> myCp1;
};