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;
};